简单来说,HTTPS 就是套在 SSL/TLS 内的 HTTP,也就是安全的 HTTP。那么,何为安全?一个安全的网络通信环境要解决三个问题:
1. 通信内容的保密性
2. 通信双方身份的真实性
3. 通信内容的完整性
HTTPS 就是为了解决这三大问题而诞生的。
通信内容的保密性
首先,理解 HTTPS 中的加解密、秘钥、公钥、私钥、对称加密、非对称加密。
简单来说,加解密就是一个函数,而秘钥则就是这个函数的参数。比如定义一个简单的加密函数,f(x) = x + b,x 就是输入的明文,而 b 就是秘钥;解密函数就是加密函数的反函数,也就是 g(x) = x - b。当不知道 b 的时候,就算看到密文也猜不出真实内容,这样就实现加解密。这种加解密都用同一个秘钥,就叫做对称加密。
在真实网络环境中,通信双方不可能进行直接沟通来定义秘钥 b,所以这就需要用到非对称加密算法了,这种算法有公钥和私钥一对钥匙,公钥是所有人都能获取到的钥匙,私钥则是服务器私自保存的钥匙。非对称加密算法中公钥加密的内容只能用私钥解密,私钥加密的内容则只有公钥才能解密。
非对称加密算法实现信息交换的基本过程:甲方生成一对秘钥并将其中的一把作为公用秘钥(公钥)向其他方公开;得到该公用秘钥的乙方使用该秘钥对信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用秘钥(私钥)对加密后的信息进行解密。
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个秘钥来进行加密和解密,这两个秘钥就是公开密钥(公钥)和私有秘钥(私钥)。
如果甲方也想要回应乙方消息呢?如果甲方用私钥来进行信息加密,所有人都知道公钥,而公钥可以解私钥的加密,也就意味着所有人都可以解密甲方回应的信息。解决方案:利用非对称加密算法加密出一个对称秘钥给甲方,甲方用他的私钥读取对称秘钥,然后就可以用对称秘钥来做对称加密,双方便可以愉快的通信啦。
通信双方身份的真实性
证书机制可以判定通信双方的真实性。证书机制是链式颁发的,HTTPS 体系中所谓的根 CA 就是最权威的机构。在 HTTPS 证书体系里面,根证书是操作系统/浏览器自带的,我们可以相信这些机构认证的证书。
判定证书真假具体来说就是先将证书用哈希算法提取摘要,然后对摘要进行加密的过程。(注意:证书是有期限的,所以即使是真证书也可能会过期)
通信内容的完整性
先用哈希算法提取内容摘要,然后对摘要进行加密生成数字签名,验证数字签名就可以判断出通信内容的完整性了。
以上便是 HTTPS 用到技术的简化版,结合起来一个 HTTPS 通信流程如下:
大体步骤:
1. 客户端发送 Client Hello 报文开始 SSL 通信,报文中包含 SSL 版本、可用算法列表、秘钥长度等。
2. 服务器支持 SSL 通信时,会以 Server Hello 报文作为报答,报文中同样包括 SSL 版本以及加密算法配置,也就是协商加解密算法。
3. 然后服务器会发送 Certificate 报文,也就是将证书发送给客户端。
4. 客户端发送 Client Key Exchange 报文,使用3中的证书公钥加密 Pre-master secret 随机密码串,后续就以这个密码来做对称加密进行通信。
5. 服务器使用私钥解密成功后返回一个响应提示 SSL 通信环境已经搭建好了。
6. 然后就是常规的 HTTP C/S 通信。
根据前文所述,步骤3和步骤6都会使用摘要和签名算法来保证传递的证书和通信不被篡改。通过这个流程可以看出,HTTPS 的核心在于加密,尤其是非对称加密算法被多次使用来传送关键信息。
网友评论