HTTP 确保Web安全的HTTPS

一.HTTP的缺点

1.通信使用明文(不加密),内容有可能会被窃听

(互联网上任意角落都有可能存在通信内容被窃听的风险)

1.1通信的加密

HTTP协议中没有加密机制,但可以通过和SSL(secue Socket Layer安全套接层)或TLS(Transport Layer Security 安全传输层协议)组合使用,加密HTTP通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP协议叫做HTTPS

1.2内容的加密

HTTP报文里所含内容加密。前提是要求客户端和服务器同时具备加密和解密机制。内容仍具有被篡改的风险。

2.不验证通信方身份,因此有可能遭遇伪装。
2.1任何人都可以发起请求

(1)无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器;

(2)无法确定响应返回到的客户端是否按照真实意图接收响应的那个客户端。有可能是已伪装的客户端。

(3)无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要信息,只想发给特定用户通信的权限;

(4)无法判定请求方是来自何方、出自谁手;

(5)即使是无意义的请求也会照单全收。无法阻止海量请求下的DoS攻击(Denial of Service,拒绝服务攻击)

2.2查明对手的证书

通过使用证书,以证明通信方就是意料中的服务器

3.无法证明报文的完整性,所以有可能遭遇篡改。
3.1接收到的内容可能有误

遭攻击者拦截并篡改内容的攻击称为中间人攻击

攻击人会随着篡改请求和响应,而让客户端与服务器之间的通信看上去仍旧是正常的。

3.2如何防止篡改

常用的是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法

这些方法无法百分百保证确认结果正确。因为PGP和MD5本身被改写的话,用户是没有办法意识到的。

二.HTTP+加密+认证+完整性保护=HTTPS

HTTP通信接口部分用SSL(secure Socket Layer)和TLS(Transport Layer Security)协议而已

1.相互交换密钥的公开密钥加密技术
1.1共享密钥加密

加密和解密同用一个密钥的方式称为共享密钥加密

发送密钥就有被窃听的风险,但不发送,对方就不能解密。密钥若能安全送达,那文件也能安全送达

1.2公开密钥加密

非对称密钥。一把叫做私有密钥,另一把叫做公开密钥

发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听走。

1.3HTTPS采用混合加密机制

HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。

(1)在交换密钥环节使用公开密钥加密方式,使用公开密钥加密方式安全地交换在稍后的共享密钥加密中使用的密钥

(2)确保交换的密钥是安全的情况下,使用共享密钥加密方式通信;之后建立通信交换报文阶段则使用共享密钥加密方式。

2.证明公开密钥正确性证书

为了解决无法证明公开密钥本身就是货真价实的公开密钥,可以通过数字认证机构和其相关机关颁发的公开密钥证书

(1)服务器把自己的公开密钥登陆至数字认证机构

(2)数字证书认证机构用自己的私有密钥向服务器的公开密码部署数字签名并颁发共钥证书

(3)客户端拿到服务器的共钥证书后,使用数字证书认证机构的公开密钥,向数字证书认证机构验证共钥证书上的数字签名,以确保服务器的公开密钥真实性

(4)使用服务器的公开密钥对报文加密后发送

(5)服务器用私有密钥对报文进行解密

2.1用以确认客户端的客户端证书

HTTPS中还以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,其作用跟服务器证书如出一辙。

2.2由自认证机构颁发的证书称为自签名证书

每个人都可以构建一套属于自己的认证机构,从而自己给自己颁发服务器证书。但该服务器证书在互联网上不可作为证书使用,似乎没有什么帮助。

2.3中级认证机构的证书可能会变成自认证证书

某些浏览器会以正规的证书来对待,可有的浏览器会当作自签名证书。

3.HTTPS的安全通信机制

客->服(1)Handshake:ClientHello客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表

服->客(2)Handshake:ServerHello服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件筛选出来的

服->客(3)Handshake:Certificate包含公开密钥证书

服->客(4)Handshake:ServerHelloDone报文通知客户端,最初阶段的SSL握手协商部分结束。

客->服(5)Handshake:ClientKeyExchange SSL第一次握手结束之后,客户端以Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种称为Pre-master secret 的随机密码串。该报文已用步骤3中的公开密钥进行加密

客->服(6)ChangeCipherSpec接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret 密钥加密

客->服(7)Handshake:Finished客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器能否正确解密报文作为判定标准

服->客(8)ChangeCipherSpec服务器同样发送 Change Clipher Spec报文

服->客(9)Handshake:Finished服务器同样发送Finished报文

客->服(10)Application Data(HTTP)服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。

服->客(11)Application Data(HTTP)应用层协议通信,即发送HTTP响应

客->服(12)Alert:warning,close notify最后由客户端断开连接。断开连接时,发送clode_notify报文。这一步之后再发送TCP FIN报文来关闭与TCP的通信

应用层发送数据的时候会附加一种叫做MAC的报文摘要,能够查知报文是否遭到篡改,从而保护报文的完整性。

4.SSL和TLS

SSL3.0为基准,后来制定了TLS1.0、TLS1.1、TLS1.2

TLS是以SSL为原型开发的协议

5.SSL速度慢

HTTPS要比HTTP慢2到100倍

5.1由于HTTPS还需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源

5.2和HTTP通信相比,SSL通信部分消耗网络资源。而SSL通信部分,又因为要对通信进行处理,所以时间又延长了

猜你喜欢

转载自blog.csdn.net/qq_38362049/article/details/81000148