什么是https协议?使用SSL证书来确保通信加密


     HTTPS其实是SSL+HTTP的缩写。当然,SSL已经基本被TLS取代了,但是我们还是用SSL作为缩写。其实SSL协议不仅适用于HTTP协议,也适用于各种应用层协议,比如FTP、WebSocket等。实际上,SSL协议和上一节的非对称加密大致相同。握手过程中主要是交换密钥,然后在通信过程中使用对称加密进行通信。


大致过程如下:这儿我只是画了个示意图。实际上,真正的SSL握手会比这个复杂得多,但本质是相似的。此外,我们需要关注HTTPS如何防止中间人攻击。从上图可以观察到,服务器通过SSL证书传输公钥,客户端验证SSL证书,其中证书认证系统是保证SSL安全的关键。接下来,让我们解释一下CA认证系统,看看它如何防止中间人攻击。


CA证书认证体系在前一节中,我们看到客户端需要验证服务器返回的SSL证书,那么客户端如何验证服务器SSL证书的安全性呢?

cacertificates系统中的权威认证机构,所有的证书都是权威机构颁发的,权威机构的CA证书都内置在操作系统中。我们将这些证书称为ca根证书,要颁发证书,如果我们的应用服务器要使用SSL,需要通过权威的认证机构颁发CA证书。我们将服务器生成的公钥和站点相关信息发送给CA发布机构,然后CA发布机构通过服务器发送的相关信息由CA发布机构签名。


由此我们可以得到我们的应用服务器的证书,证书会相应地生成证书内容的签名,并用CA颁发机构的私钥对签名进行加密,得到证书的指纹,并生成与上级证书的关系链。下面我们下载百度的证书看看:能够看到,百度被globalsign2信任,同样的globalsign2被GlobalSignR1信任。当客户端(浏览器)检查证书时,它将逐级检查,直到最终的根证书。如果没有问题,可以信任服务器证书。


如何验证服务器证书客户端(浏览器)如何验证服务器证书?首先通过层次关系找到上级证书,服务器的证书指纹由上级证书中的公钥解密得到签名(sign1),然后由签名算法(sign2)计算出服务器证书的签名。通过比较sign1和sign2,如果相等,说明证书没有被篡改或伪造。这里有趣的是,证书验证中使用的RSA通过用私钥加密证书签名,用公钥解密,巧妙地验证了证书的有效性。这样,通过证书的认证系统,可以避免中间人窃取AES_KEY发起对HTTP通信消息的拦截和修改。

分享: