http://www.cnblogs.com/charlesblc/p/6341265.html 其中的一篇。
参考
https://zhuanlan.zhihu.com/p/20336461?refer=auxten
在Internet环境下,安全问题我主要分为如下几类:
首先,如果能用https,就尽量用https,能用nginx等常见服务器,就用常见服务器,主要能避免以下问题:
如果需要自己实现Server端,实现一套合格的SSL还是很考验功底的:
工程实现过程中,要考虑:
业务逻辑层面,要考虑:
即使你做到了天衣无缝,还要考虑队友有时会掉链子:
写完之后整个人都不好了
一、Encryption算法和Hash算法的区别
二、加解密算法分为对称(Symmetric)、非对称(Asymmetry)两大类
三、加密体系
TLS的前身是SSL,HTTP + TLS = HTTPS
一旦客户端和服务器都同意使用TLS协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据[1]。通过握手,客户端和服务器协商各种参数用于建立安全连接:
1. 当客户端连接到支持TLS协议的服务器要求建立安全连接并列出了受支持的密码组合(加密密码算法和加密哈希函数),握手开始。
2. 服务器从该列表中决定加密和散列函数,并通知客户端。
3. 服务器发回其数字证书,此证书通常包含服务器的名称、受信任的证书颁发机构(CA)和服务器的公钥。
4. 客户端确认其颁发的证书的有效性。
5. 为了生成会话密钥用于安全连接,客户端使用服务器的公钥加密随机生成的密钥,并将其发送到服务器,只有服务器才能使用自己的私钥解密。
6. 利用随机数,双方生成用于加密和解密的对称密钥。
7. 这就是 TLS 协议的握手,握手完毕后的连接是安全的,直到连接(被)关闭。如果上述任何一个步骤失败,TLS 握手过程就会失败,并且断开所有的连接。
五、盐的重要性
之前在这篇文章中提到过,如果单纯的把文件按块去加密,即使采用最强壮的算法也会存在一个很明显的漏洞,这里不再赘述,参见:用已知加密算法AES加密文本123,得到密文xxx,问能否根据密文、加密算法、原文本123直接推导出密钥是什么? - auxten 的回答
关于哈希函数的选用:
工作中发现,很多人对哈希函数的了解仅限于MD5。例如,在做数据库的分库分表的时候,可能需要对hostname做一次哈希再去取模,这里采用MD5就显得过于浪费CPU。要知道MD5平均会将每个Byte进行6.8次运算代入。
如果只是需要利用哈希的离散型,完全可以采用更轻的哈希算法
互联网服务器的实现过程需要考虑哪些安全问题 & 加解密及哈希知识点
原文:http://www.cnblogs.com/charlesblc/p/6341363.html