7 确保Web安全的HTTPS
使用HTTPS
协议可以有效防止HTTP
协议中存在的信息窃听或身份伪装等安全问题
7.1 HTTP的缺点
主要不足:
- 通信使用明文,不加密,内容可能会被窃听
- 不验证通信方的身份,有可能遭遇伪装
- 无法证明报文的完整型,有可能已遭篡改
7.1.1 通信使用明文可能会被窃听
HTTP
本身不具备加密功能,报文直接使用明文方式发送
- TCP/IP 可能被窃听的网络
互联网是联通到全世界的网络组成,由于TCP/IP
协议族工作机制,在所有的通信线路上都可能遭到窥视
即使对通信加密,也会被窥视到通信内容,和未加密是一样的,只是加密处理后的报文信息不容易破解,但加密后报文信息本身还是会被看到
- 加密处理防止被监听
通信的加密
HTTP
协议没有加密机制,可以通过SSL(Secure Socket Layer 安全套接层)
或TLS(Transport Layer Security安全传输层协议)
的组合使用
用SSL
建立安全通信线路之后,就可以在这条线路上进行HTTP
通信,与SSL
组合使用的HTTP
被还称为HTTPS(HTTP Secure)超文本传输安全协议
或HTTP over SSL
内容的加密
将通信内容本身加密。客户端需要对HTTP
报文进行加密处理后再发送请求
要求客户端和服务器端同时具备加密和解密机制
7.1.2 不验证通信方的身份就可能遭遇伪装
HTTP
协议中的请求和响应不会对通信方进行确认,可能会存在服务器是否就是发送请求中URI真正指定的主机,返回的响应是否真的返回到实际提出的客户端
等类似问题
- 任何人都可以发起请求
在HTTP
协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。服务器不管对方是谁都会返回一个响应
HTTP存在的隐患
- 无法确定请求发送至目标的
web
服务器是否按真实意图返回响应的那台服务器。有可能是已伪装的web
服务器 - 无法确定响应到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端
- 无法确定正在通信的对方是否具备访问权限。因为某些
web
服务器上保存着重要的信息,只想发给特定用户通信的权限 - 无法判定请求是来自何方、出自谁手
- 即使是无意义的请求也会照单全收。无法阻止海量请求下的
Dos(Denial of Service)拒绝服务攻击
查明对手的证书
SSL
可用来确定HTTP
协议通信方。SSL
不仅提供加密处理,还可以使用证书
用于确定方
证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。而且,伪造证书从技术角度来说是异常困难的
只要能勾确认通信方服务端和客户端持有的证书,即可判断通信方的真实意图
通过使用证书,以证明通信方就是意料中的服务器。另外,客户端持有证书即可完成个人身份的确认
7.1.3 无法证明报文完整性,可能已遭篡改
完整性是指信息的准确度。若无法证明其完整性,通也就无法判断信息是否准确
- 接收到的内容可能有误
HTTP
协议无法证明通信的报文完整性,在请求或响应送出之后,直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉
没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的
例如,从A
网站上下载了一个文件,但无法确定客户端下载的文件和资源服务器上存放的文件是否前后一致。即使文件在下载过程中被篡改,客户端也觉察不到的
这种,在请求或响应的传输途中,遭攻击或者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)
7.2 HTTP + 加密 + 认证 + 完整性保护 = HTTPS
7.2.1 HTTP加上加密处理和认证及完整性保护壳后即是HTTPS
在HTTP
通信过程中,使用未加密的明文,在web
页面中输入一些重要的个人隐私时,如果整个通信线路遭到窃取,个人隐私也就暴露了。而且,服务器和客户端都没有办法确认通信
添加了加密及认证机制的HTTP称为HTTPS
一般,使用浏览器时,使用HTTPS
通信时,会有一个带锁的标记
7.2.2 HTTPS 是身披SSL外壳的HTTP
HTTPS
并非是应用层的新协议,只是HTTP
通信接口部分使用用SSL(Secure Socket Layer)
和TLS(Transport Layer Security)
协议代替
通常,HTTP
直接和TCP
通信,当使用SSL
时,则演变成先和SSL
通信,再由SSL
和TCP
通信
SSL
独立于HTTP
的协议,不光是HTTP
协议,其他运行在应用层的SMTP
和Telnet
等协议均可配合SSL
协议使用,是应用最广泛的网络安全协议
7.2.3 相互交换密钥的公开密匙加密技术
SSL
采用的是公开密匙加密Public-key cryptography
的加密处理方式
加密方法中的加密算法是公开的,而密匙却是保密的。加密和解密都会用到密钥。没有密匙就无法对密码解密,也就是说,任何人只要持有密钥就能解密
- 共享密匙加密的困境
加密和解密同用一个密钥的方式称为共享密钥加密Common keycrypto system
,也叫做对称密钥加密
- 使用两把密钥的公开密钥加密
公开密钥加密使用一对非对称的密钥,一把私有密钥private key
,另一把叫做公开密钥public key
。私有密钥不能让其他任何人获取,而公有密钥则可以随意发布
使用公开密钥的加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己私有的密钥进行解密。如果没有密钥,要根据密文和公开密钥,获取加密前的信息原文是比较困难的
- HTTPS采用混合加密机制
HTTPS
采用共享密钥和公开密钥加密两者并用的混合加密机制
7.2.4 证明公开密钥正确性的证书
公开加密的代表性问题就是 无法证明公开密钥本身就是货真价实的公开密钥
为了解决这个问题,可以使用由数字证书认证机构和其他相关机关颁发的公开密钥证书
数字证书认证机构处于客户端与服务器双发都可信赖的第三方机构的立场
7.2.5 HTTPS 的安全通信机制
HTTPS通信步骤
在流程中,应用层发送数据时,会附加MAC(Message Authrntication Code)
的报文摘要,能够查知报文是否遭到篡改,从而保护报文的完整性
图从仅使用服务器端的公开密钥证书,也就是服务器证书,建立HTTPS
通信的整个过程
最后
书打算就摘抄到这里,剩下的只是翻翻看了看
看完感觉也没记住啥,只是知道了有这么个东西,用到时,再查找
有错误,请指出
共勉 :)