HTTPS
HTTPS = HTTP + 加密 + 认证 + 完整性保护
HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL(安全套接层)和TLS(安全传输层协议)协议代替而已。
HTTP的不足:
- 通信使用明文(不加密),内容可能被窃听
- 即使经过加密,通信内容也会被窥视,只是无法破解报文信息的含义
- 通信加密,建立通信安全线路(SSL+TLS)
- 内容加密,对报文主体进行加密
- 不验证通信方的身份,可能遭遇伪装
- 伪装的Web服务器
- 伪装的客户端
- 无法确定对方是否具有访问权限
- 无法判断请求来自何方、出自谁手
- 对请求照单全收,无法阻止Dos攻击
- 无法证明报文的完整性,有可能遭到篡改
SSL
安全套接层 (Secure Scoket Layer),提供认证、加密、摘要功能。
加密技术
共享密钥加密
公开密钥加密
- 使用一对非对称的密钥,发送密文的一方使用对方的公开密钥进行加密,对方收到加密信息后,再使用自己的私有秘钥进行解密
- 存在的问题:1)加密方式复杂,效率低。2)无法证明公开密钥本身的真实性(CA解决)
HTTPS加密机制
? HTTPS采用混合加密机制。
- 使用公开密钥加密方式安全的交换在稍后的共享密钥加密中要使用的密钥
- 确保交换的密钥是安全的前提下,使用共享密钥加密方式进行通信
数字证书认证机构
- 服务器把自己的公开密钥登录至数字证书认证机构
- 数字证书认证机构用自己的私钥向服务器的公开密钥部署数字签名并颁发公钥证书
- 客户端拿到服务器的公钥证书后,使用数字机构的公开密钥(事先植入浏览器中),验证公钥证书上的数字签名,以确认服务器的公开密钥的真实性
- 使用服务器的公开密钥对报文加密后发送
- 服务器用私有密钥对报文进行解密
HTTPS的安全通信机制
步骤1. 客户端发送 Client Hello 报文开始 SSL 通信。报文包含客户端支持的SSL的版本,加密组件列表(加密算法、密钥长度等)。
步骤2. 服务器支持 SSL 通信时,会以 Server Hello 报文作为应答,报文包含的内容与客户端一样,只是加密组件内容是从客户端加密组件中筛选出来的。
步骤3. 服务器发送 Certificate 报文。报文中包含公开密钥证书。
步骤4. 最后服务器发送 Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
步骤5. SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为应答。报文中包含通信加密中使用的一种被称为Pre-master secret 的随机密码串。该报文使用步骤3中的公开密钥进行加密。
步骤6. 客户端继续发送 Change Cipher Spec 报文。该报文提示服务器,在此报文之后的通信会采用Pre-master secret的密钥加密。
步骤7. 客户端发送 Finished 报文。该报文包含连接至今全部报文整体校验值。这次握手是否成功,要服务器是否正确解密该报文做为评判标准。
步骤8. 服务器同样发送 Change Cipher Spec 报文。
步骤9. 服务器同样发送 Finished 报文。
步骤10. 服务器和客户端的 Finished 报文交换完毕之后,SSL连接就算建立完成。
步骤11. 应用层协议通信,即发送HTTP请求。
步骤12. 最后由客户端发送 close_notify 报文断开连接。
步骤13. 断开 TCP 连接。
|