HTTPS(HTTP Secure)
一、为什么需要 HTTPS
HTTP 有以下不足:
- 通信使用明文(不加密),内容可能被窃听
HTTP 明文协议的缺陷是导致数据泄露、数据篡改、流量劫持、钓鱼攻击等安全问题的重要原因。HTTP 协议无法加密数据,所有通信数据都在网络中明文“裸奔”。通过网络的嗅探设备及一些技术手段,就可还原 HTTP 报文内容。
- 无法证明报文的完整性,所以可能遭篡改
所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确。
由于 HTTP 协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。
换句话说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的。
- 不验证通信方的身份,因此有可能遭遇伪装
HTTP 协议中的请求和响应不会对通信方进行确认。
在 HTTP 协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。HTTP 协议无法验证通信方身份,任何人都可以伪造虚假服务器欺骗用户,实现“钓鱼欺诈”,用户无法察觉。
为了保证这些隐私数据能加密传输,让 HTTP 运行安全的 SSL/TLS 协议上,即 HTTPS = HTTP + SSL/TLS,通过 SSL 证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。
SSL 协议位于 TCP/IP 协议与各种应用层协议之间,浏览器和服务器在使用 SSL 建立连接时需要选择一组恰当的加密算法来实现安全通信,为数据通讯提供安全支持。
HTTPS 比 HTTP 协议相比多了以下优势:
- 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥;
- 数据完整性:内容传输经过完整性校验;
- 身份认证:第三方无法伪造服务端(客户端)身份。
二、HTTPS 的定义
1、什么是 HTTPS
HTTPS 是在 HTTP 上建立 SSL 加密层,并对传输数据进行加密,是 HTTP 协议的安全版。
2、HTTPS 的主要作用
- 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
- 对网站服务器进行真实身份认证。
我们经常会在 Web 的登录页面和购物结算界面等使用 HTTPS 通信。使用 HTTPS 通信时,不再用 http://
,而是改用 https://
。
另外,当浏览器访问 HTTPS 通信有效的 Web 网站时,浏览器的地址栏内会出现一个带锁的标记。对 HTTPS 的显示方式会因浏览器的不同而有所改变。
三、HTTPS 的工作流程
- Client 发起一个 HTTPS(比如
https://www.leophen.cn/aleuznxmc123129ed
)的请求,根据 RFC2818 的规定,Client 知道需要连接 Server 的 443(默认)端口。 - Server 把事先配置好的公钥证书(public key certificate)返回给客户端。
- Client 验证公钥证书:比如是否在有效期内,证书的用途是不是匹配 Client 请求的站点,是不是在 CRL 吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的 Root 证书或者 Client 内置的 Root 证书)。如果验证通过则继续,不通过则显示警告信息。
- Client 使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给 Server。
- Server 使用自己的私钥(private key)解密这个消息,得到对称密钥。至此,Client 和 Server 双方都持有了相同的对称密钥。
- Server 使用对称密钥加密“明文内容 A”,发送给 Client。
- Client 使用对称密钥解密响应的密文,得到“明文内容 A”。
- Client 再次发起 HTTPS 的请求,使用对称密钥加密请求的“明文内容 B”,然后 Server 使用对称密钥解密密文,得到“明文内容 B”。
概况来说,是以下流程:
- 首先客户端通过 URL 访问服务器建立 SSL 连接;
- 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端;
- 客户端的服务器开始协商 SSL 连接的安全等级,也就是信息加密的等级;
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给服务器;
- 服务器利用自己的私钥解密出会话密钥;
- 服务器利用会话密钥加密与客户端之间的通信。
四、HTTPS 是如何保证安全的
为什么说 HTTPS 比 HTTP 更安全呢?
HTTPS 比 HTTP 多了 SSL 安全层,通过混合加密提升了数据隐私性;通过摘要算法保证了数据完整性;通过数字签名验证身份。
1、混合加密
在 HTTPS 通信过程中,采用的是对称加密+非对称加密,也就是混合加密。
具体做法是发送密文的一方使用对方的公钥进行加密处理并传给对方,对方用自己的私钥解密拿到“对称的密钥”。
2、摘要算法
实现完整性的手段主要是摘要算法,也就是常说的散列函数、哈希函数。
可以理解成一种特殊的压缩算法,它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串,摘要算法保证了“数字摘要”和原文是完全等价的。所以,只要在原文后附上它的摘要,就能够保证数据的完整性。
3、数字签名
数字签名能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。
原理是用私钥加密,公钥解密。
签名和公钥一样完全公开,任何人都可以获取。但这个签名只有用私钥对应的公钥才能解开,拿到摘要后,再比对原文验证完整性,就可以像签署文件一样证明消息确实是你发的。
五、HTTPS 的缺点
- HTTPS 协议的多次握手导致页面加载时间更长;
- HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗;
- 申请 SSL 证书需要钱,功能越强大的证书费用越高。
六、HTTPS 与 HTTP 的区别
- HTTPS 的 URL 以 https:// 开头,而 HTTP 的 URL 以 http:// 开头。
- HTTPS 比 HTTP 更安全,对搜索引擎更友好,利于 SEO;
- HTTPS 的标准端口是 443,而 HTTP 的标准端口是 80;
- HTTPS 工作于传输层,而 HTTP 工作于应用层;
- HTTPS 需要用到 SSL 证书,而 HTTP 不用。