前言
一直以来想总结下HTTPS和HTTP的区别,近来看了些相关资料,在此总结下。首先给出参考的资料,并表示感谢:
http://www.jianshu.com/p/37654eb66b58
http://www.codeceo.com/article/differ-between-https-and-http.html
《图解HTTP》(感觉写的不错,推荐~)
下面进入正题,一句话总结下:HTTP效率更高,HTTPS安全性更高。
1、几个概念
1-1 什么是HTTP
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
1-2 什么是SSL
SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5 以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密。SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。
1-3 什么是HTTPS
HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议,它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。 它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使 用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。
2、如何加密
SSL采用一种叫做公开密钥加密(Public-key cryptography)的加密方式。近代的加密方法中,加密算法是公开的,而秘钥是保密的,通过这种方式得以保持加密方法的安全性。
2-1 共享密钥加密的困境
加密和解密同用一个密钥的方式称为共享密钥加密, 也被叫做对称密钥加密。共享加密方式加密时必须将密钥也发给对方,在互联网上转发密钥时,如果通信被监听那么密钥就会落入攻击者之手,同时也就失去了加密的意义。
那怎么才能安全的转交?
2-2 使用两把密钥的公开密钥加密
公开密钥加密方式很好地解决了共享密钥加密的困难。公开密钥加密使用一对非对称的密钥,一把叫做私有密钥,另一把叫做公开密钥。
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,在使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不用担心密钥被攻击者窃听而盗走。
另外,要想根据密文和公开密钥,恢复到信息原文是异常困难的,因为解密过程就是在对离散对数进行求值,这并非轻而易举就能办到的。退一步讲,如果能对一个非常大的整数做到快速地因式分解,那么密码还是在存在希望的,但就目前的技术来看是不太现实的。
2-3 HTTPS采用混合加密机制
HTTPS采用共享秘钥加密和公开秘钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅适用公开密钥加密来通信。但是公开密钥加密和共享密钥加密相比,其处理速度要慢。
所以应充分利用两者各自优势,将多种方法组合起来用于通信。在交换密钥环节适用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
2-4 证明公开密钥的正确性的证书
遗憾的是,公开密钥加密方式还是存在一些问题的,那就是无法证明公开密钥本身就是货真价实的公开密钥。比如,正准备和某台服务器建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传输途中,真正的公开密钥已经被攻击者替换了。
为了解决上述问题,可以使用有数字证书认证机构和其他相关机关颁发的公开密钥证书,基本流程为:
- 服务器把自己的公开密钥登录至数字证书认证机构
- 数字证书认证机构用自己的私有密钥向服务器的公开密钥署数字签名并颁发公钥证书
- 客户端拿到服务器的公钥证书后, 使用数字证书认证机构的公开密钥, 向数字证书认证机构验证公钥证书上的数字签名, 以确认服务器的公开密钥的真实性
- 使用服务器的公开密钥对报文加密后发送
- 服务器用私有密钥对报文解密
3、HTTP+加密+认证+完整性保护 = HTTPS
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS (Transport Layer Security) 协议替代而已。
通常,HTTP直接和TCP通信。当使用SSL时,演变成了先和SSL通信,再由SSL和TCP通信了。简而言之,所谓HTTPS,其实就是身披SSL协议的这层外壳的HTTP。
在采用SSL后,HTTP就拥有了HTTPS的加密,证书和完整性的保护这些功能。
SSL是独立于HTTP的协议,所有不光是HTTP协议, 其他运行在应用层的SMTP(邮件协议)和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最广泛的网络安全技术。
4、效率
HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现。因此,所传送的数据不容易被网络黑客截获和解密。 然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低。而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别。所以,我们只需对那些涉及机密数据的交互处理使用HTTPS协议,这样就做到鱼与熊掌兼得。