当浏览器用 HTTPS 协议请求一个页面时,下面的过程也会发生:

1.浏览器向 server 发出 https 请求,server 监听 443 端口,这个端口是 web server 用来监听使用了 HTTPS 协议的请求。

2.一旦 web 浏览器与 web 服务器之间成功建立连接,SSL 握手流程就开始了。

在握手流程中,浏览器和服务器会针对数据的加密算法进行协商并答成一致。过程如下:

  • 1. 浏览器向服务器发送一些自身的信息(例如其支持的SSL版本);

  • 2. 服务器响应类似信息,例如通信过程中将要使用的SSL版本;

  • 3. 服务器会向浏览器发送证书,证书中包含了加密数据的公钥,发布者信息,有效期以及服务端唯一标识;

  • 4. 浏览器核实该证书,并发送信息通知服务器证书已验证完成;

  • 5. 浏览器向服务器发送“Change cipher spec”指令:浏览器将对数据进行加密;

  • 6. 服务器向浏览器发送“Change cipher spec”指令,服务端将要对待发送的数据进行加密。

当我们单击chrome中小锁标志,我们就可以看到服务端发送过来的数字证书。

3. 浏览器产生对称的密钥并通过服务器公钥将其加密,随后将加密后的密钥发送到服务器。这个对称的密钥用于在整个会话中进行加密和解密。

我们知道数字证书是用来提供公钥的。有两个关键的术语用来理解数字证书。

X.509 是一个定义数字证书格式的标准,它规定了证书中需要包含哪些信息,例如下面:

  • 版本 指定 X.509 的版本

  • 序列号 唯一的一串数字用以区分证书

  • 证书发布者名称 CA

  • 公钥

CA(Certification authority表示发布该证书的机构。只有从发布者那里才能获得证书。证书中通常会有发布者的签名用以保证有效性。