HTTPS 通信
HTTP 是明文传输,在安全上存在风险、容易被窃听、冒充和篡改。
HTTPS
HTTPS 在 HTTP 和 TCP 层之间加入了 SSL/TLS 协议,HTTPS 需要向 CA(证书权威机构)或证书签发机构申请数字证书。
HTTPS 建立连接
- Client Hello (告诉服务端可选的 TLS 版本、可选的加密套件(Cipher Suites) 、客户端随机数 R1)
- Server Hello(告诉客户端选择的 TLS 版本、加密套件、服务器证书、服务器随机数 R2)
- 验证服务器证书(验证证书的合法性,获取证书中的公钥)
- 客户端发送随机数(客户端生成随机数 R3,用公钥加密 R3 发送给服务器,用于后续生产会话密钥。客户端根据三个随机数生成会话密钥)
- 服务器生成会话密钥,并做最后的回应(服务器收到最后一个随机数,和客户端生成相同的会话密钥)
- 客户端与服务器进行加密会话
加密套件
- 对称加密算法
- 非对称加密算法
- hash 算法
客户端验证服务器证书
证书中包含了
服务器公钥、服务器公钥的签名(还包含服务器的主机名,服务器的地区,有效期等)。
证书签发机构的证书(包含公钥、证书签发机构公钥的签名、名字、地区等)。
验证 证书签发机构的证书 的根证书名称。
操作系统中内置了很多根证书,根证书是 CA 认证中心签发的数字证书。 安装根证书代表受 CA 认证中心的信任。 根证书的签发者是它自己本身,下载根证书说明您对该根证书以下所签发的证书都表示信任。 证书包含三部分,分别是:用户的信息,用户的公钥,还有CA中心对该证书里面的信息的签名。
客户端验证
- 验证证书的合法性,是否有效
- 验证证书中服务器的主机名正确
如果攻击者对证书中的服务器主机名修改了,那么签名机构的公钥验证就会失败。证书签名机构的证书是由根证书进行验证,而根证书是存在于操作系统中的。
Master secret(会话密钥)
客户端加密密钥(用于客户端向服务端发送数据加密数据)
服务端加密密钥(用于服务端向客户端发送数据加密数据)
客户端 MAC secret (message authenticate code)
服务端 MAC secret