前一段时间公司升级 HTTPS,自己也看了一些 HTTPS 的相关知识,最近也在找工作,顺便总结一下(大沈阳的工作真是不好找)
非对称加密和对称加密
非对称加密
又称公开密钥加密,有一对密钥,公开其中一个并不会影响密钥的安全,被公开的叫做公钥,另一个是私钥,维基解释
特点
- 用私钥加密的数据,只能公钥解开,反之亦然。
- 公钥加密只能加密少量数据
- 实现数字签名
算法
RSA
对称加密
加密解密都使用同一个密钥维基解释
特点
算法
DES、AES
数字签名和数字证书
- 数字签名是为了验证信息是否被篡改、丢失(完整性);信息的发送者的真实身份(认证);信息发送者是否发送过该消息(不可否认性)
- 数字证书是为了验证我接收的公钥是否是信息的发送者的
举例:
A 有一个公钥和一个私钥,A 将自己的公钥给了 B,A 给 B 写信。
- A 将自己的公钥和一些信息在CA(数字证书认证机构)上做认证。CA 会用自己的私钥对这些信息加密,从而形成数字证书。
- A 将自己的信件内容用自己的私钥加密信件散列码形成数字签名,最后用将信件内容、数字签名、数字证书一起发给 B
- B 收到信件,首先去 CA 查询 A 的真实身份,符合后获取 A 的公钥(公钥在数字证书中),用公钥解密数字签名,获得散列码,最后自己收到的信件内容进行散列,两个散列码进行对比,即可完成对 A 身份的认证和 A 信件内容是否被串改进行验证。
注意:这里 B 从 A 获取的证书时,并在 CA 获取 A 公钥的过程,是对 A 真实身份的验证。B 对 A 散列码的验证,是对 A 发送的内容是否被串改,进行了验证。
两个问题
- 如果 A 的数字证书,不在浏览器的"受信任的根证书颁发机构"中,那么浏览器会提示。
- 如果 A 的数字证书,在浏览器的"受信任的根证书颁发机构"中,但信息不对(如域名不对),那么浏览器会认为 A 伪造、冒用了 A 的证书。
SSL/TLS
四次握手
- 客户请求服务端,发送自己支持的加密方法和随机码①
- 服务端确定加密方式,发送给客户端加密方式、数字证书、随机码②
- 客户端验证服务端证书,生成随机码③,并用服务端的公钥加密随机码③,发送给服务端
- 服务端用私钥机密随机码③,并用随机码①②③生成会话密码,以后用该会话密钥进行通信。
几个问题
- HTTPS 是否比 HTTP 慢?
是比 HTTP 慢,因为 HTTP 在 TCP/IP 基础上传输的,TCP 只需要三次握手。而 HTTPS 需要在 TCP/IP 基础上再加 TLS 的四次握手。所以一定慢。
- HTTPS 用到加密方式
HTTPS 即用到了非对称加密、又用到了对称加密。其中公钥私钥是非对称加密方式,而三个随机码形成的会话密钥,是对称加密。
HTTPS 解决的三大风险
- 窃听风险
- 篡改风险
- 冒充风险
会话密钥解决了盗听风险,数字签名解决了篡改风险,数字证书(CA 认证)解决了冒充风险
参考
数字签名和数字证书
SSL/TLS 协议运行机制的概述
数字签名(维基百科)