HTTPS原理剖析

HTTPS


超文本传输安全协议: Hypertext Transfer Protocol Secure, 是一种网络安全传输协议。在计算机网络上, HTTPS经由超文本传输协议(HTTP)进行通信, 但是利用SSL/TLS来加密数据包。本质就是在TCP运输层和HTTP应用层之间加了一层安全机制。目的是提供对网络服务器的身份认证, 保护交换数据的隐私和完整性。

为何需要HTTPS?

不使用SSL/TLS的HTTP通信, 就是不加密的通信。明文传播会带来风险。

  1. 窃听风险:第三方可以获取通信内容。
  2. 篡改风险:第三方可以修改通信内容。
  3. 冒充风险:第三方可以冒充他人身份参与通信。
HTTPS加密传输使用的加密和HASH算法
  1. 非对称加密算法:RSA,DSA/DSS

    • 非对称加密: 加密和解密的密钥是不同的, 分为公钥和密钥。
    • 私钥只有一份,保存在收信人手中, 不会在通信中传输, 不会被泄露。公钥可以有多份, 保存在写信人手中。
    • 假设客户端A要与服务器B进行通信。A用公钥加密, B用私钥解密。
    • 即使上述过程中公钥和通信内容都被截获, 由于没有服务器B的私钥, 第三方也无法解开通信内容。
  2. 对称加密算法:AES,RC4,3DES

    • 加密和解密的密钥是相同的。
    • 假设客户端A与服务器B进行通信。A和B用同一个密钥进行加密解密。
    • 风险:密钥一旦被截获, 通信内容就能够被破解。
  3. HASH算法:MD5,SHA1,SHA256
    • 使用HASH算法校验内容是否被篡改。
HTTPS握手过程
  1. 客户端A向服务器B发送HTTPS请求连接。
  2. 服务器B向客户端A返回数字证书(公钥、域名)。
  3. 客户端A得到公钥后, 加密自己随机产生的对称密钥。同时通过自己产生的随机密钥加密要传输的通信内容。(这里注意:对称加密算法速度明显快于非对称加密算法, 所以通信内容是用对称算法加密的)。
HTTPS握手过程中发生的事
  1. 服务器B返回的数字证书, 客户端A会进行如下验证:

    • 遍历计算机和浏览器中保存的根证书, 若其中某个根证书的公钥可以解开服务器返回的数字证书, 获得服务器返回的数字证书中的公钥和域名, 则说明OK。否则握手失败。整个HTTPS通信的核心就是这个可信的根证书。
    • 客户端A判断证书中的域名是否和正在访问的域名相同。若不同,显示证书不可信, 但是握手加密过程依然可以进行。
    • 客户端产生一个随机的对称密钥。
    • 使用服务器B返回的数字证书中的公钥来加密此对称密钥。
    • 将此加密后的对称密钥发送给服务器B。服务器B通过私钥解密获得客户端A随机产生的对称密钥。至此客户端A和服务器B都拥有了对称密钥。
    • 客户端A通过自身随机产生的对称密钥来加密HTTP通信内容。服务器B可以通过之前得到的对称密钥解密通信内容。
  2. 握手过程中涉及到两种证书。

    • 服务器B发送给客户端A的证书-用户证书。
    • 客户端A所在计算机中原本保存的根证书。
什么是用户证书
  1. 服务器B发送给客户端A的用户证书, 是服务器B向CA机构(数字证书认证机构)申请而来的证书。
CA机构(数字证书认证机构)
  1. CA机构有一对根密钥。CA机构会用其私钥加密服务器B的公钥。结果就是:通过CA机构认证的证书(公钥、域名)。
  2. CA机构说白了就是一个受信任的中间人。
什么是根证书
  1. CA机构有一对根密钥。其公钥就是根证书。
  2. 用户的操作系统中,会集成世界范围内所有被信任的CA机构(数字证书认证机构)的根证书。即所有被信任机构的公钥。
  3. iPhone->通用->关于本机->证书信任设置->进一步了解被信任的证书。可以看到iOS中可用的受信任根证书的列表。
为什么数字证书认证机构呢?

这需要提到中间人攻击。

  1. 假设客户端A向服务器B发起HTTPS连接请求。那么服务器B就将自己的公钥发送给客户端A。
  2. 中间人C通过某种手段截获这个公钥B。
  3. 中间人C截获服务器B发送给客户端A的真公钥后, 伪造一份服务器B的公钥(当然中间人C自己持有了私钥), 中间人C会把伪造的公钥发送给客户端A。
  4. 客户端A通过伪造的公钥加密自己的对称密钥, 传送给服务器B的时候, 会被中间人C截获, 并且中间人C通过自己手中的私钥解密得到该对称密钥。然后中间人C再把这对称密钥用服务器B的公钥加密, 发送给服务器B。这样AB之间的通信仍然继续。
  5. 如此一来, 接下来客户端A发送给服务器B的通信内容, 都会在不知情的情况下被第三方得到。AB之间的非对称加密形同虚设。
  6. 有了根证书就解决该问题了。因为服务器B发送给客户端A的用户证书只能通过根证书来解密获得。确保了用户证书(公钥、域名)真实有效。因为如果是第三方伪造的, 那么根证书将不能解开从服务器B发送来的数字证书, 通信失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值