HTTPS协议入门
1. HTTPS出现的背景
虽然HTPP协议很优秀并且方便,但是不得不正视HTTP协议存在的一些问题:
- 通信使用明文(不加密),内容可能会被窃听;
- 不验证通信双方的身份,因此有可能遭遇伪装;
- 无法证明报文的完整性,所以有可能已遭篡改;
这些问题不仅在HTTP协议上出现,其他未加密的协议中也会存在这类问题。
由于这些问题的存在,HTTPS协议就应运而生,HTTPS,超文本传输安全协议,是和SSL(Secure Socket Layer,安全套接层)或者TLS(Transport Layer Security,安全传输层协议)组合使用的,通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。
2. HTTPS的三大功能
上面提到了HTPP协议的不足,下面说一下HTTPS是如何解决这三个问题的。
2.1 通信使用明文(不加密),内容可能会被窃听
在网络上传输信息,本身就是可以被他人截获的,比如通过抓包工具,第三者就可以在同局域网的一台主机,或者路由器或者互联网的任何地方都可能被截获数据。HTPP使用明文传输,相当于你传输的数据完全暴露在了网络上。
HTTPS传输数据的时候会对通信进行加密,使用SSL建立安全线路之后,就可以在这条线路上进行HTTP通信了。相当于单独建立了一条安全信道。
2.2 不验证通信双方的身份,因此有可能遭遇伪装
HTTP协议中的请求和响应不会对通信双方进行确认,也就是说存在“服务器是否就是发送请求中URI真正的主机,返回的响应是否是真的返回到实际提出请求的客户端”等类似问题。并且,由于不存在通信双方的处理步骤,任何人都可以发起请求。可能会出现DOS攻击等问题。
HTTPS中SSL就可以确认确认通信方,它提供了一种被称为证书的手段,证书由值得信赖的第三方机构颁发,用以证明服务器和客户端是实际存在的,另外伪造证书从技术角度说是异常困难的一件事,所以只要能确认通信方持有的证书就可以判断通信方的真实意图。
2.3 无法证明报文的完整性,所以有可能已遭篡改
HTTP协议无法确认客户端发出的请求和服务端接收到的请求是相同的,同样,也无法确认服务端发送的响应和客户端接收的响应是相同的。很容易出现中间人攻击。
虽然HTTP协议可以使用md5等信息摘要算法保证数据完整性,但是MD5本身都可能被篡改,也就无法保证其安全性。SSL提供了摘要功能。可以保证数据的完整性。
从HTTPS的功能来看,可以总结为:HTTP+加密+认证+完整性保护=HTTPS。
3. HTTPS的混合加密机制
首先先来谈谈两种加密方法:
- 共享密钥加密:加密和解密使用相同的密钥,但是在通信的时候需要把密钥也一并发送,这样有可能被别人截获;
- 公开密钥加密:加密和解密使用不同的密钥,服务器提供公开密钥,客户端使用公开密钥对数据进行加密,然后服务器使用私有密钥对密文进行解密,这样就保证密文不会被破解。
但是使用公开密钥加密方式传输数据比较慢,所以HTTPS结合了两者的优点,使用混合加密机制,首先在交换密钥的时候使用公开密钥加密方式,确认连接后,传输数据使用共享密钥加密方式。
4. HTTPS使用场景
当使用HTTPS时,通信会变慢,导致通信变慢的原因有两个,一是网络负载,当使用HTTPS进行通信时,网络负载比HTTP要高2-100倍。而是由于HTTPS每次通信都要加解密,对CPU的消耗也很大。所以一般只有在传输机密信息时使用HTTPS,比如用户密码,银行信息等。
再有就是使用HTTPS需要支付购买证书的费用,一些机构考虑到这点也可能优先选择HTTP协议。
参考:
《图解HTTP》