什么是HTTPS
HTTPS是HTTP+TLS/SSL。因为HTTP是明文传输,所以会有安全问题,而TLS协议是传输层安全协定。在了解TLS之前,首先要了解一些常识性的概念
加密算法
对称加密算法
对称加密算法就是加密和解密使用的一样的密钥进行加解密。
常见的对称加密算法有DES,AES,现在使用AES较多。如果只是用对称加密的话,密钥泄漏则会造成严重的后果。
非对称加密算法
一对公钥和私钥,公钥加密内容只有私钥可以解开,而密钥加密内容只有公钥可以解开。并且仅有公钥,不能推算出私钥。如果只是用非对称加密的话,数据可能会遭到篡改。
数字签名
为了防止数据被篡改,使用数字签名可以解决。数字签名,就是采用摘要算法对传输的数据提取出摘要,并且用自己的私钥进行加密。这个数字签名会和报文一起发送给接收方。
但是还有有问题,如果接收方不能确认你这个公钥就是来自于发送方的。因此引入了第三方的认证机构,引入了证书。
验证数字签名
首先用公钥解密,然后计算摘要进行对比,符合则签名没问题。
证书
数字证书的出现就是为了解决这个问题。引入一个可靠的第三方认证机构。
一个数字证书,包含公钥,公钥拥有者的信息,有效期,CA的数字签名等。CA的公钥是公开的,
验证证书的真实性
拿到证书后,首先用公钥进行解密,验证数字签名。验证成功则签名未被篡改。
TLS握手协商流程
要想清楚TLS握手的细节流程,那么首先要明确TLS握手是为了干什么,TLS握手是为了建立安全的链接通道,保证数据传输的安全性,不被窃听和篡改。它使用了非对称加密算法和对称加密算法。并且通过非对称加密算法来产生对称加密算法。
一下是一个以RSA算法的握手过程。
第一步:Client Hello,客户端发起连接请求,并提供支持的加密套间,版本,以及产生一个随机数Random1.
第二步:Server Hello,服务端选择合适的加密套件和版本,产生一个随机数Random2.
第三步:Certificate 服务端将自己的证书发送给客户端。
第四步:Server Hello Done 服务端表示Server Hello结束
第五步:Certificate Verify 客户端校验证书。生成Random3,使用Random1,Random2,Random3生成PreMaster key并使用公钥进行加密。
第六步:Client Key Exchange,将PreMaster Key发送给服务端,并使用算法计算出对称加密密钥。服务端收到后,可以将PreMaster
解密,得到Random3,并使用Random1,2,3计算出对称加密密钥。
第七步:Client Cipher Spec Spec,这是一个通知消息,客户端通知服务端,编码改变:之后的消息,都通过对称加密来进行。
第八步:Encrypted HandShake Message
这是一个finish消息,表示客户端握手完成,并且将之前的握手消息使用协商好的密钥进行加密,发送给服务端。服务端收到后,对消息进行解密,如果能解密成功,则表明双方是同一个密钥。
第九步:Change Cipher Spec
这一步是服务端发出的消息改变通知。
第十步:Encrypted HandShacke Message
这是服务端发出的finish消息,使用对称密钥,将之前的握手消息加密发送给客户端,拿给客户端解密。这一步结束之后。TLS连接正式建立。
扩展
以上是一个TLS握手的流程,通过抓包分析,可以复现以上的步骤。不过还有一些细节,比如TLS是支持双向认证的,服务端可以要求客户端提供证书。那么步骤就不止上面一些了。并且如果加密算法不同,还可能会有其他的步骤。这些不在本文的讨论范围内,有兴趣可在参考资料中自行了解更多知识。
参考资料
https://www.jianshu.com/p/7158568e4867