Https 加密
参考: Nginx 下部署 HTTPS 与安全调优
《图解HTTP》第七章
关键字:
"公钥" "私钥"
"数字签名"(digital signature)
"数字证书"(digital certificate)
"证书中心"(certificate authority,简称CA)
"摘要"(digest)
什么是 Https
Https
并不是一种新的被发明出来的协议, 而是 HTTP
协议与 SSL
协议组合而成为保证敏感数据安全传输的一种方法.
了解Https之前你需要知道的
对称加密之XOR加密
参考 阮一峰:XOR加密简介(私以为文章最后以密码的存储为例极为不合适, 仅参考XOR的实现即可)
XOR
即 异或运算
, 符号 ^
, 相同为假,相异为真。1011^1000 = 0011。
对同一字符连续使用使用两次 XOR
就会返回这个值本身。
实现方式:
// 第一次 XOR
1010 ^ 1111 // 0101
// 第二次 XOR
0101 ^ 1111 // 1010
作用:
#有要加密传输的信息message
key = random()
secret = XOR(message, key)
message = XOR(secret, key)
只要双方都知道 相同的key
就可以加密传输数据, 这就是 对称加密
。
非对称加密之RSA
参考《计算是怎样跑起来的》10.4 章节
非对称加密
和 对称加密
类似, 但是 非对称加密
双方所拥有的 key
是不同的。
作用:
#有要加密传输的信息message
secret = 私钥加密(message)
message = 公钥解密(secret)
#公钥私钥反过来也是可以的
secret = 公钥加密(message)
message = 私钥解密(secret)
实现方式是数学上 素数、乘方、取模的一些神奇魔法,我们致敬但不做深究。
数字签名
作用: 以保证自己内容不被篡改
方法如下:
摘要 = hash(内容)
数字签名 = 私钥加密(摘要)
发送(内容 + 数字签名) #可以保证自己内容不被篡改
原理: 别人使用你的 公钥
才能解密数字签名,成功解密证明这个数字签名是由作者生成的,之后对内容进行hash,对比该hash与解密出的hash是否相同,这一步保证了数据不被篡改。
Https 的实现方式
客户端-服务端-CA三方的通信上图展示了服务器通过可信任的第三方机构, 发布自己公钥的过程. 之后服务器和客户端会使用非对称加密的方式安全的交换对称加密的
key
, 之后也会一直以对称加密的方式去传输数据, 而不再使用更加耗费计算机资源的非对称加密.
为什么需要证书中心
因为服务器公钥要发布出去,而且要保证发布的公钥就是自己公钥. 这一点就需要一个可信任的第三方机构做保证.
网友评论