关于https

有了http,为什么还需要https

1. 能够对传输报文进行加密

能够在通信双方间简历一个信息安全通道,来保证数据传输的安全性。

使用了ssl/tls协议进行加密、解密。

2. 通信双方能够确认对方的身份真实性

防止被恶意第三方假冒通信放,窃取报文。

这个由证书机制来保证,这个证书由受信任的数字证书认证机构CA所颁发,能够保证对方的身份是真实的。

3. 能够确保数据的完整性

能够防止内容被第三方篡改或者冒充。

这个主要是通过数字摘要来保证。数字摘要是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文,这一串密文又称为数字指纹(fingerprint),它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。所以只要对内容稍有改动,算出来的指纹就和原来的指纹不一样了,这样就可以知道内容已经被篡改过,不可信了。

此外,https除了在http上添加了ssl层,并没有进行更多的修改,这一点是考虑到了可拓展性和兼容性。

https工作过程

(来自微信读书-《图解HTTP》) 

  1. tcp 三次握手,因为https也是基于tcp的,所以也要进行三次握手
  2. 客户端和服务器端通过hello报文确定使用的tls版本信息、加密套件、选择的压缩算法和随机数等。
  3. 服务端发送CA证书,CA证书包含了公钥,私钥服务端保留。
  4. 客户端验证该公钥证书,如果证书无效或者过期了,则显示警告信息,如果有效,那么就利用随机数生成会话密钥,并且使用公钥去加密会话密钥。客户端发送公钥加密后的会话密钥的密文给服务端。
  5. 服务端利用私钥解密密文,得到客户端生成的会话密钥。服务端向客户端发送使用会话密钥加密后的密文,这一步是为了告诉客户端可以使用会话密钥进行通信了。
  6. 客户端接收到后进行验证,通过验证后,就可以开始加密通信了
  7. 客户端与服务端开始加密通信
  8. 通信完毕后,四次挥手结束。

什么是对称加密和非对称加密?

  • 对称加密就是通信双方使用同一个密钥进行加密解密
  • 非对称加密是指通信双方使用的不是一个密钥,一般来说,网站服务端保留私钥,客户端浏览器拥有公钥,公钥加密,私钥解密。

为什么需要进行身份认证

因为要防止在通信过程中受到中间人的攻击。

假设理想情况下,没有中间人会在通信过程中进行攻击,那么https的密钥传输过程是这样的:

  1. 网站服务器先基于“非对称加密算法”,随机生成一个“密钥对”(为叙述方便,称之为“k1 和 k2”)。因为是随机生成的,目前为止,只有网站服务器才知道 k1 和 k2。
  2. 网站把 k1 保留在自己手中,把 k2 用明文的方式发送给访问者的浏览器。因为 k2 是明文发送的,自然有可能被偷窥。不过不要紧。即使偷窥者拿到 k2,也【很难】根据 k2 推算出 k1(这一点是由“非对称加密算法”从数学上保证的)。
  3. 浏览器拿到 k2 之后,先【随机生成】第三个对称加密的密钥(简称 k)。然后用 k2 加密 k,得到 k'(k' 是 k 的加密结果)浏览器把 k' 发送给网站服务器。由于 k1 和 k2 是成对的,所以只有 k1 才能解密 k2 的加密结果。因此这个过程中,即使被第三方偷窥,第三方也无法从 k' 解密得到 k。
  4. 网站服务器拿到 k' 之后,用 k1 进行解密,得到 k至此,浏览器和网站服务器就完成了密钥交换,双方都知道 k,而且【貌似】第三方无法拿到 k。然后,双方就可以用 k 来进行数据双向传输的加密。

如果有中间人攻击,那么通信过程就会变成:

  1. 这一步跟原先一样——服务器先随机生成一个“非对称的密钥对”k1 和 k2(此时只有网站知道 k1 和 k2)。
  2. 当网站发送 k2 给浏览器的时候,攻击者截获 k2,保留在自己手上。然后攻击者自己生成一个【伪造的】密钥对(以下称为 pk1 和 pk2)。攻击者把 pk2 发送给浏览器。
  3. 浏览器收到 pk2,以为 pk2 就是网站发送的。浏览器不知情,依旧随机生成一个对称加密的密钥 k,然后用 pk2 加密 k,得到密文的 k'浏览器把 k' 发送给网站。(以下是关键)发送的过程中,再次被攻击者截获。因为 pk1 pk2 都是攻击者自己生成的,所以攻击者自然就可以用 pk1 来解密 k' 得到 k然后,攻击者拿到 k 之后,用之前截获的 k2 重新加密,得到 k'',并把 k'' 发送给网站。
  4. 网站服务器收到了 k'' 之后,用自己保存的 k1 可以正常解密,所以网站方面不会起疑心。至此,攻击者完成了一次漂亮的偷梁换柱,而且让双方都没有起疑心。

为什么会被攻击?因为缺乏可靠的身份认证。所以CA证书就很有必要了,因为它可以确认对方的身份。

加入了CA证书身份认证的https交换密钥过程:

  1. 网站,即服务端,获取某个数字证书认证机构购买CA证书,证书会包括两个文件,一个文件包含公钥,还有一个文件包括私钥。网站必须在自己的服务器上部署这两个文件。公钥证书是发送给客户端浏览器的,私钥证书是网站自己保留的。这两个密钥是使用非对称加密算法计算得出的,也就是即使有人截获了公钥,也基本不可能推导出私钥,这个是在数学层面证明出来的。
  2. 当浏览器访问网站时,网站服务器首先会把公钥证书发送给浏览器。
  3. 浏览器会对接受到的证书进行验证。如果发现证书“不对劲”,浏览器会提示用户“CA证书安全警告”。有了验证的这一步,就可以大大减少中间人攻击了。为什么浏览器可以发现CA证书“不对劲”?因为一般的CA整数,都是来自某个权威的数字证书认证机构的,并且现在主流的浏览器都会内置几十种权威CA的根证书。所以浏览器就能够利用系统内置的根证书,判断就收到的CA证书是不是某个CA颁发的。
  4. 如果CA证书被信任了,那么浏览器就从证书中提取出“公钥”,然后随机生成一个用于对称加密的密钥 k。然后利用公钥去加密这个密钥 k,得到密钥k'。然后浏览器将这个 k' 发送给网站。
  5. 网站收到 k',就使用自己的私钥对 k' 进行解密,得到原本的对称加密密钥 k。
  6. 到这为止,浏览器和网站都拥有了对称密钥 k,就可以使用 k 进行密文传输啦!

参考资料

刨根问底系列之https详细握手过程 - 掘金

HTTPS的协议需求与密钥交换过程 - 简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值