确保web安全的HTTPS
HTTP的不足
- 通信使用明文,内容可能会被窃听
- 不验证通信方的身份,有可能遭遇伪装
- 无法证明报文的完整性,所以可能已被篡改
通信使用明文可能会被窃听
明文:未经加密的报文
HTTP报文使用明文发送
-
TCP/IP是可能被窃听的网络。
按TCP/IP的工作机制,通信内容在所有的通信线路上都有可能被窥视
即使通信经过加密,也只是让人无法破解报文信息的含义,加密处理后的报文信息本身还是会被看到。
窃听相同段上的通信只需要收集互联网上流动的数据包。抓包工具就是获取HTTP协议的请求和响应内容,并对其进行解析。
-
加密处理防止被窃听
-
通信加密
HTTP和SSL(安全套接层)或TLS(安全传输层)的组合使用,加密HTTP通信内容。
用SSL建立安全通信线路之后,就可以在这条通信线路上进行HTTP通信。与SSL组合使用的HTTP被称为HTTPS。
-
内容加密
对HTTP报文所含的内容(报文主体)进行加密。前提是客户端和服务器同时具备加密和解密机制
-
不验证通信方的身份就可能遭遇伪装
-
任何人都可以发起请求
-
在HTTP协议通信中,服务器只要接收到请求,不管对方是谁都会返回响应(但也仅限于IP和端口号没有被web服务器设定限制访问的前提下)。
-
客户端也无法确认服务器就是请求URI中真正指定的主机。
-
服务器对无意义的请求也会照单全收,无法阻止海量请求导致的Dos攻击
Dos攻击:拒绝服务攻击,目的是使计算机无法提供正常的服务
-
-
查明对手的证书
SSL不仅提供加密处理,而且可以用证书来确认通信双方
证书是有值得信任的第三方机构颁发,可以证明服务端和客户端是真实存在的。
通过证书,客户端可以确认要访问的服务端是否为请求URI中指定的服务端,服务端也可以确认客户端是否为有权发送请求的客户端
无法证明报文完整性,可能已遭篡改
完整性指信息的准确度。
- 接收到的内容可能有误。在请求或响应送出直到对方接收的时间内,请求和响应的内容可能被篡改。这种就叫中间人攻击
HTTP+加密+认证+完整性保护=HTTPS
把添加了加密及认证机制的HTTP称为HTTPS(HTTP Secure)
访问HTTPS通信的网站时,浏览器地址栏会出现带锁的标记
HTTPS不是应用层的新协议,只是HTTP通信接口部分用SSL(安全套接层)和TLS协议代替而已,即通常HTTP直接与TCP通信,使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信。采用SSL后,HTTL就拥有了HTTPS的加密,证书和完整性保护的功能。
SSL是独立于HTTP的协议。
交换密钥的公开密钥加密技术
SSL采用一种公开密钥加密的加密处理方式。
加密和解密都要用到密钥。
共享密钥加密
加密和解密用同一个密钥的方式称为共享密钥加密,也称为对称密钥加密
问题:以共享密钥方式加密时必须将密钥也发给对方,如果通信被监听,密钥有可能落入攻击者之手。只要拿到密钥,任何人都可以解密。
使用两把密钥的公开密钥加密
公开密钥加密解决了共享密钥的问题。
公开密钥加密使用一对非对称的密钥。一把为私有密钥,另一把为公开密钥。私钥不发送,公钥可以随意发布。
- 发送密文的一方使用对方的公开密钥进行加密处理,对方收到加密信息后,再用自己的私钥解密
- 要根据密文和公钥来解密时异常困难的
混合加密机制
HTTPS采用混合加密机制
公开秘钥加密与共享密钥加密相比,处理速度要慢。所以HTTPS采用混合加密机制:
使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥,之后的建立通信,交换报文阶段则使用共享密钥加密方式。
证明公开密钥正确性的证书
公开密钥加密方式的问题:
无法证明公开密钥本身就是真实的公开密钥,所以出现了公开密钥证书
证书认证及使用流程:
- 服务器向认证机构提出公开密钥的申请
- 服务器判明申请者的身份后,对已申请的公开密钥做数字签名,将公开密钥和数字签名一起放入公钥证书
- 服务器将公钥证书发给客户端
- 客户端拿到证书后,可以使用公开密钥对数字签名进行验证,验证通过就说明服务器的公开密钥实时值得信赖的
HTTPS的通信步骤
HTTPS比HTTP速度慢的原因
- 通信慢 HTTPS除了要和TCP连接,发送HTTP请求响应外,还要和SSL通信,整体通信量比HTTP大
- SSL进行加密处理会大量消耗CPU和内存等硬件资源,导致处理速度变慢
解决方法:使用SSL加速器