前一段时间公司升级 HTTPS,自己也看了一些 HTTPS 的相关知识,最近也在找工作,顺便总结一下(大沈阳的工作真是不好找)


非对称加密和对称加密

非对称加密

又称公开密钥加密,有一对密钥,公开其中一个并不会影响密钥的安全,被公开的叫做公钥,另一个是私钥,维基解释

特点

算法
RSA

对称加密

加密解密都使用同一个密钥维基解释

特点

算法
DES、AES

数字签名和数字证书

举例:
A 有一个公钥和一个私钥,A 将自己的公钥给了 B,A 给 B 写信。

  1. A 将自己的公钥和一些信息在CA(数字证书认证机构)上做认证。CA 会用自己的私钥对这些信息加密,从而形成数字证书。
  2. A 将自己的信件内容用自己的私钥加密信件散列码形成数字签名,最后用将信件内容、数字签名、数字证书一起发给 B
  3. B 收到信件,首先去 CA 查询 A 的真实身份,符合后获取 A 的公钥(公钥在数字证书中),用公钥解密数字签名,获得散列码,最后自己收到的信件内容进行散列,两个散列码进行对比,即可完成对 A 身份的认证和 A 信件内容是否被串改进行验证。

注意:这里 B 从 A 获取的证书时,并在 CA 获取 A 公钥的过程,是对 A 真实身份的验证。B 对 A 散列码的验证,是对 A 发送的内容是否被串改,进行了验证。

两个问题

  1. 如果 A 的数字证书,不在浏览器的"受信任的根证书颁发机构"中,那么浏览器会提示。
  2. 如果 A 的数字证书,在浏览器的"受信任的根证书颁发机构"中,但信息不对(如域名不对),那么浏览器会认为 A 伪造、冒用了 A 的证书。

SSL/TLS

四次握手

  1. 客户请求服务端,发送自己支持的加密方法和随机码①
  2. 服务端确定加密方式,发送给客户端加密方式、数字证书、随机码②
  3. 客户端验证服务端证书,生成随机码③,并用服务端的公钥加密随机码③,发送给服务端
  4. 服务端用私钥机密随机码③,并用随机码①②③生成会话密码,以后用该会话密钥进行通信。

几个问题

  1. HTTPS 是否比 HTTP 慢? 是比 HTTP 慢,因为 HTTP 在 TCP/IP 基础上传输的,TCP 只需要三次握手。而 HTTPS 需要在 TCP/IP 基础上再加 TLS 的四次握手。所以一定慢。
  2. HTTPS 用到加密方式 HTTPS 即用到了非对称加密、又用到了对称加密。其中公钥私钥是非对称加密方式,而三个随机码形成的会话密钥,是对称加密。

HTTPS 解决的三大风险

  1. 窃听风险
  2. 篡改风险
  3. 冒充风险

会话密钥解决了盗听风险,数字签名解决了篡改风险,数字证书(CA 认证)解决了冒充风险

参考

数字签名和数字证书
SSL/TLS 协议运行机制的概述
数字签名(维基百科)


↙↙↙阅读原文可查看相关链接,并与作者交流