https加密过程

create on in computer_base with 0 comment and 178 view

https,即http + ssl,它的加密过程是怎么样的呢?

  1. 客户端发起https请求,告诉服务端支持哪些加密算法。
  2. 服务端接收请求,然后发送CA数据证书给客户端。

数据证书是什么?
CA数据证书由两部分组成:
1) 原始信息
非对称加密算法的公钥(通常为RSA算法生成的公钥),服务器信息,其它信息(使用的对称加密算法,hash算法)。
2) 数字签名
使用hash算法计算原始信息,生成一段摘要,然后再使用CA私钥加密这段摘要,得到的即是数字签名。

CA数据证书生成?
服务器首先生成一对公私钥, 使用公钥和域名以及其它信息生成证书, 发给某权威证书中心进行数字签名(即,使用证书中心的私钥进行加密), 完成后将签名后的证书发回给服务器, 服务器将其安装在本地, 之后向客户端发送的就是这个证书.

  1. 客户端接收响应,做如下操作:
    1). 验证CA证书的合法性
    - 证书的颁发机构是否合法。
    - 使用客户端信任的对应的证书中心的公钥解密去CA证书, 得到服务器的公钥, 域名和摘要以及原始信息, 再使用hash算法计算原始信息得到一个摘要,验证这两个摘要是否一致。(防止原始信息被攻击者更改)
    - 证书中包含的域名是否与正在访问的地址一致。
    2). 如果证书受信任,使用服务器的公钥加密数据,发送给服务端 (后续操作主要是:客户端要与服务器进行一次测试)
    - 生成一串随机数密码,并用证书中的公钥加密 —— 得到已加密的随机数。
    - 使用约定的hash算法计算握手消息 —— 得到一个hash值。
    - 使用随机数加密(对称加密)握手消息 —— 得到已对称加密的消息。
    - 向服务端发送前三项的信息。

  2. 服务端接收信息

    • 使用私钥解密,获得随机数。
    • 使用随机数解密(对称解密),获得握手消息。
    • 使用hash计算握手消息,验证是否与客户端发来的hash值一致。
    • 使用随机数加密一段握手消息,使用hash计算握手信息,将他们发送给客户端。
  3. 客户端接收响应

    • 解密并计算握手消息的hash,用此hash与服务端发来的hash进行对比,若一致,之后所有通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

中间攻击人
要达到劫持效果, 中间攻击人最主要是需要知道客户端和服务端使用了哪个对称加密算法和随机数!

而如何才能知道呢?

  1. 要让客户端信任攻击者的证书中心(根证书)
  2. 攻击者劫持服务端返回的证书时, 解密证书, 得到证书信息,更改证书内容(主要是将服务端的公钥改为自己的)并在自己的证书中心签发一个新证书, 并把它响应给客户端
  3. 客户端拿到(假)证书后, 使用攻击者的根证书去验证, 发现是正常的, 然后使用证书内的公钥去加密随机数, 由此, 攻击者可使用自己的私钥解密, 得到随机数! 然后再使用服务器的公钥去加密, 骗过服务端.

4489173087da1380ad1311e889a0e9265220ac21.png

28902498c56895fe783111e78ba28e64c5de4333.png

😁😂😃😄😅😆😇😈😉😐😑😒😓😔😕😖😗😘😙😠😡😢😣😤😥😦😧😨😩😰😱😲😳😴😵😶😷😸😹🙀🙁🙂🙃🙄🙅🙆🙇🙈
🙂