http使用明文,容易导致隐私信息泄露,或被人篡改信息、假冒身份。因此有了https。
https
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):一般理解为HTTP+SSL/TLS,http的升级安全版,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。
SSL\TLS
SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
防冒充(pretending): 验证交互双方(通常只是对服务端)身份的真实性;
防窃听(eavesdropping): 对传输的数据进行加密,即使被截获也无法被识别;
防篡改(tampering): 确保接收方收到的数据是原始未篡改过的,若被篡改能识别出来并丢弃;
这里用到非对称加密算法。客户端向服务器端索要并验证公钥,客户端用这个公钥加密约定信息,而该消息只有拥有私钥的服务器端才能解密,这样双方“秘密地”协商生成"对话密钥",并双方采用"对话密钥"进行加密通信。将公钥放在数字证书中,只要证书是可信的(由权威CA颁布),公钥就是可信的,从而保证公钥不被篡改。
握手过程
- 建立tcp连接;
- clientHello:客户端发起请求,包括客户端支持的协议版本(如SSL
3.0)、压缩方法、加密方法以及一个随机数1; - serverHello:服务器端收到clientHello消息后,做出回应。包括,确认协议版本、加密方法、自己生成的一个随机数2以及服务器证书;
- 客户端验证服务器的证书,从中取出公钥。客户端再次生成一个随机数3,并用公钥进行加密后发回给服务器,并告知握手结束;
- 服务器用私钥解密得到随机数3。双方根据这三个随机数生成一个密钥,进行对称加密。随后的信息将用协商好的加密方法和密钥发送;
HTTPS和HTTP的区别
- 默认端口不同,http是80,https是443;
- https需要CA证书,更贵,功能越强大的证书费用越高;
- HTTPS协议多次握手,导致页面的加载时间延长近50%;
- HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
- SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。
- http是明文传输而https是具有安全性的ssl加密传输;
- http和https使用连接方式不同,http是无状态的,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。;