HTTPS原理
为什么有https
- https解决了什么问题
-
因为
http
不安全,由于 HTTP 天生明文传输的特性,在 HTTP 的传输过程中,任何人都有可能从中截获、修改或者伪造请求发送。 -
在 HTTP 的传输过程中不会验证通信方的身份,因此 HTTP 信息交换的双方可能会遭到伪装,也就是
没有用户验证
。 -
在 HTTP 的传输过程中,接收方和发送方并
不会验证报文的完整性
- 什么是https
在 HTTPS 中,使用传输层安全性(TLS)
或安全套接字层(SSL)
对通信协议进行加密。也就是 HTTP + SSL(TLS) = HTTPS。
- HTTPS做了什么
加密(Encryption)
, HTTPS 通过对数据加密来使其免受窃听者对数据的监听,这就意味着当用户在浏览网站时,没有人能够监听他和网站之间的信息交换,或者跟踪用户的活动,访问记录等,从而窃取用户信息。
数据一致性(Data integrity)
,数据在传输的过程中不会被窃听者所修改,用户发送的数据会完整
的传输到服务端,保证用户发的是什么,服务器接收的就是什么。
身份认证(Authentication)
,是指确认对方的真实身份,也就是证明你是你
(可以比作人脸识别),它可以防止中间人攻击并建立用户信任。
HTTPS中TLS的加密算法
对称加密算法
就是加密和解密使用同一个密钥。
- 浏览器给服务器发送一个随机数
client-random
和一个支持的加密方法列表 - 服务器给浏览器返回另一个随机数
server-random
和双方都支持的加密方法 - 然后两者用加密方法将两个随机数混合生成密钥,这就是通信双上加解密的密钥
问题是双方如何安全的传递两个随机数和加密方法,直接传给客户端,那过程中就很可能被窃取,别人就能成功解密拿到数据。
不对称加密算法
就是一对密钥,有公钥
和私钥
,其中一个密钥加密后的数据,只能让另一个密钥进行解密。
TLS实际用的是两种算法的混合加密
。通过 非对称加密算法 交换 对称加密算法 的密钥,交换完成后,再使用对称加密进行加解密传输数据。这样就保证了会话的机密性。
摘要算法
主要用于保证信息的完整性。常见的MD5算法、散列函数、哈希函数都属于这类算法,其特点就是单向性
、无法反推原文
如何保证数据不被篡改?签名原理和证书?
数字证书(数字签名)
数字证书需要向有权威的认证机构(CA)
获取授权给服务器。首先,服务器
和CA
机构分别有一对密钥
(公钥和私钥),然后是如何生成数字证书的呢?
- CA机构通过摘要算法生成服务器公钥的
摘要
(哈希摘要) - CA机构通过CA私钥及特定的签名算法加密摘要,生成
签名
- 把
签名
、服务器公钥
等信息打包放入数字证书
,并返回给服务器
证书验证流程
- 使用CA公钥和声明的签名算法对CA中的签名进行解密,得到服务器公钥的
摘要内容
- 再用摘要算法对证书里的服务器公钥生成摘要,再把这个摘要和上一步得到的摘要
对比
,如果一致说明证书合法,里面的公钥也是正确的,否则就是非法的
HTTPS优缺点
优点
- 内容加密,中间无法查看原始内容
- 身份认证,保证用户访问正确。如访问百度,即使DNS被劫持到第三方站点,也会提醒用户没有访问百度服务,可能被劫持
- 数据完整性,防止内容被第三方冒充或篡改
- 虽然不是绝对安全,但是现行架构下最安全的解决文案了,大大增加了中间人的攻击成本
缺点
- 要钱,功能越强大的证书费用越贵
- 证书需要绑定IP,不能在同一个IP上绑定多个域名
- https双方加解密,耗费更多服务器资源
- https握手更耗时,降低一定用户访问速度