HTTPS 的握手过程
在之前 给博客启用 HTTPS 的博文中,我们知道了怎么给自己的博客开启 HTTPS,本篇简要介绍下,HTTPS 连接与 HTTP 连接的不同。
首先看下 HTTPS 握手的流程,归纳起来,有以下几个步骤:
- 浏览器将自己支持的一套加密规则发给服务器
- 服务器从中选出一组加密算法和 HASH 算法,将自己的身份信息,以证书的形式发回给浏览器
- 浏览器获得证书后,要做以下工作
- 校验证书的合法性,如果证书受信任,会在浏览器地址栏显示一个绿色的锁,否则给出证书不受信提示
- 如果证书受信,或者接受了不受信的证书,浏览器会生成一串随机数密码,并用证书中提供的公钥加密
- 使用约定的 HASH 算法计算握手消息,并使用生成的随机数对消息加密,然后将之前生成的所有信息发给服务器
- 服务器接收到浏览器发来的数据,要做以下工作
- 使用自己的私钥将信息解密,取出密码,使用密码解密浏览器发出的握手消息,并验证 HASH 是否与浏览器发来的一致
- 使用密码加密一段握手消息,发送给浏览器
- 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密
画成时序图如下:
综合本篇和之前的那篇,可以总结出 HTTPS 和 HTTP 的区别:
- HTTPS 协议需要到 CA 申请证书
- 监听端口不同,HTTP 监听 80 端口, HTTPS 监听 443 端口
- HTTP 中,信息是明文传输,HTTPS 则是具有安全性的 ssl 加密传输,比 HTTP 更安全
- 建立 HTTPS 需要客户端和服务器交换公钥,然后每次传输都需要加密,在性能上,HTTPS 要比 HTTP 差
参考:
- 原文作者:JimmyXu
- 原文链接:http://xujimmy.com/2017/12/11/https-handshakes.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。