https真正的含义是由两个部分组成,首先是HTTP:(超文本传输协议)是一种用于传输和显示超文本文档(如HTML)的协议。从安全通信的角度来看,HTTP本身并不提供加密功能,这意味着通过HTTP传输的数据在传输过程中是以纯文本形式传播的,容易受到窃听和篡改的威胁。因此需要结合SSL和TLS来保证数据传输的安全,形成了HTTPS,下面我将结合过程图来阐述关于HTTPS的安全通道建立的过程。
第一:客户端发起连接。
如下图所示,其中browser是浏览器,是客户端与服务器建立连接的桥梁,一般存在于客户端中。
客户端在浏览器中输入以"https://"开头的网址,浏览器向服务器发起连接请求。浏览器收到信息后会根据网址向服务器发送连接请求,服务器收到请求后会立即准备SSL证书,其中包含了服务器的公钥和一些其他信息(感兴趣的可以去查查,根据重要性这里不在赘述)。
SSL证书由可信任的证书颁发机构签名。
第二步:客户端验证证书。
服务器将SSL证书发送给客户端中的浏览器,通过浏览器来检查证书的合法性,包括检查证书是否由可信任的证书颁发机构签发,证书中的域名是否和访问的域名匹配等,从而确保客户端与服务器之间建立的安全连接是可信赖的。
如果检查通过客户端会根据SSL证书生成对称密钥。
第三步:协商加密算法
客户端会用服务器的公钥对生成的对称密钥和随机数P1(后面中的TLS握手会详细解释)进行加密 然后通过桥梁——浏览器将加密后的数据包发送给服务器。
第四步:安全通道建立。
服务器收到数据包后会用自己的私钥进行解密操作,得到 P1后生成对称密钥,该对称密钥与客户端生成的相同(后面中的TLS握手会详细解释)。这样就建立了可以进行安全通信的通道。
上面就是HTTPS建立安全通道的过程。我会通过对TLS的阐述来解释上述过程中存在的一些问题。
TLS握手:
客户端在发送连接请求时会包含自身支持的加密算法列表的,服务器收到请求后会根据加密列表选择其中的一个加密算法进行加密,并生成一个随机数P2,然后加上SSL证书进行打包发送给客户端,在服务器发送数据包的同时,客户端会生成随机数P1,客户端收到数据包后会使用P1和P2生成对称密钥,然后将对称密钥和P1用服务器的公钥进行加密后发送给服务器,服务器再根据P1和P2生成对称密钥,这就是保证对称密钥相同的原因。