概念
- http协议的全称是超文本传输协议,是一个基于请求和响应的、无状态的、应用层的协议,常基于TCP/IP协议传输数据。
- https协议是加上SSL鉴权的http。https是一种通过计算机网络进行安全通信的传输协议,经由http进行通信,利用SSL/TLS建立信道,传输加密的数据包。https使用的主要目的是提供对请求方和响应方的身份认证,同时保护传输的数据的隐私与完整性。
流程
- 客户端向服务器发送https请求,然后连接到服务器的443接口,发送的信息主要是随机值1和客户端支持的加密算法。
- 服务器收到请求之后给予客户端响应握手信息,包括随机值2和匹配好的协商加密算法,这个算法一定是客户端发送给服务器的加密算法的子集。
- 服务器向客户端发送第二个响应报文,即数字证书。https协议要求服务端必须有一套https数字证书,这个证书可以自己申请,也可以向组织请求。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问。这套证书其实就是一对公钥和私钥。传输的数字证书其实就是公钥,包含证书的颁发机构、过期时间、服务器的公钥、CA的签名、服务端的域名信息等内容。
- 客户端收到服务器的第二个响应报文之后,通过TLS完成证书解析。首先要验证公钥是否有效。如果没有问题,那么就生成一个预主秘钥
- 客户端在认证证书通过之后,通过随机值1、随机值2和预主秘钥组装会话秘钥,通过证书的公钥加密会话秘钥。
- 传输加密信息,即加密后的会话秘钥,目的是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
- 服务端使用木遥解密,得到随机值1、随机值2和预主秘钥,然后组装和客户端相同的会话秘钥
- 客户端通过会话秘钥发送一条消息给服务端,主要验证服务端是否可以正常接收客户端加密的请求。
- 服务端也会通过会话秘钥加密一条消息回传到客户端,如果客户端能够正常接受,表明SSL层连接完成了。
问题
- 无法保证保证服务端下发给客户端的公钥是真正的公钥,而不是中间人伪造的公钥?
- 无法保证证书被安全传输
解决方法
- 使用数字证书。数字证书内容包含了加密后的公钥、权威机构的信息、服务器域名以及景观CA私钥签名之后的证书内容(经过先通过哈希函数计算得到证书数字摘要,然后通过权威机构私钥加密数字摘要得到数字签名)、签名计算方法以及证书对应的域名。
- 第三方攻击者无法伪装服务端证书,因为第三方攻击者去CA那边寻求证人的时候CA会要求其提供域名的whois信息、域名管理邮箱等证明身份的信息,而第三方攻击者是无法得到这些信息的。
总结
- 安全性方面,https协议的加密范围比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。SSL证书的信用链体系并不完整,特别是在某些国家可以控制CA证书的情况下,中间人攻击一样可行。
- 成本方面,首先https证书需要购买,其次https连接缓存不如http高效,导致流量成本高。第三https连接服务端占用的资源比http高很多,所以服务器需要投入更高的成本。第四,https协议握手阶段比较费时,对网站的响应速度有影响。