网络通讯中证书机制

网络通讯中的加密方式和证书机制,如对称、非对称,HTTPS就一定安全吗?什么是中间人攻击?CA证书机制是什么?

HTTPS

HTTPS = HTTP + TLS/SSL

  1. SSL:Secure Socket Layer,安全套接字层,SSL3.0后更名为TLS;
  2. TLS:传输层安全协议,建立在传输层、应用层之间,为应用层提供数据封装、压缩、加解密等功能;
    • TLS 1.1,1.2(废弃)
    • TLS 1.2(主流)
    • TLS 1.3(性能更好,更安全)

HTTPS握手过程

  1. 客户端发起HTTPS请求(443端口),告知服务端,自己支持的TLS版本加密套件、和第1个随机数
  2. 服务端确认支持的TLS版本选择的加密套件、并生成第2个随机数,返回给客户端
  3. 随后服务端发送CA证书(含有服务端公钥和CA签名)给客户端
  4. 服务端发送Server Hello结束报文
  5. 客户端使用CA公钥(内置于操作系统)验签服务端证书,并获取服务端公钥;
  6. 客户端生成第3个随机数,并使用公钥加密,发送给服务端,服务端私钥解密拿到预主密钥(第三个随机数)

只有客户端、服务端知道 预主密钥
双方通过3个随机数 计算出 会话密钥,第三个随机数不会被中间人替换;

  1. 服务端确认握手完成,后续数据通信,都使用随机数生成的会话密钥进行加密通信

非对称加密:用于交换信息、验证身份、保障获取对称密钥; 对称加密:效率高,用于最终业务数据通信

为什么需要3个随机数?

HTTPS握手过程是铭文传输的,使用多个随机数计算得到最终的通信密钥,更不容易破解;

HTTPS都加密了什么?

HTTPS对整个

Http header + Http body
进行加密;

GET https://cn.bing.com/fd/ls/lsp.aspx HTTP/1.1 HOST: https://cn.bing.com User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X) Keep-Alive: 300 Connection: keep-alive

数字签名

使用数字签名保证数据不被篡改;签名验签过程:

数字签名

  1. 服务端将要传输的文件进行哈希运算 => 文件哈希值;
  2. 服务端使用私钥对哈希值进行签名运算 => 数字签名;
  3. 服务端发送文件、数字签名、公钥给客户端;
  4. 客户端拿到文件和服务端公钥,使用公钥进行验签,得到文件哈希值1;
  5. 客户端使用相同的哈希运算,得到文件哈希值2;
  6. 两个哈希值相同,则验签通过,数据未被篡改;否则验签失败;

中间人

数字签名中间人

中间人将数据截获,并使用中间人自己的公私钥进行签名,再使用中间人自己的公钥替换服务端的公钥,仍能保证数据在用户端验签的时候成立;

数字签名无法保证公钥不被伪造,中间人能够伪造公钥

因此仍需要一个机制能够验证用户拿到的公钥,就是所请求的服务方的,即数字证书机制

数字签名算法

  • RSA
  • DSA
  • ECDSA

安全数字签名算法:RSA(≥3072 bits)/ECDSA(>=256 bits)

数字签名方式

1、自签名

  • openssl
  • 在线证书申请 2、CA认证

数字证书

caflow

数字证书由公认的、可信赖的证书颁发机构进行签名、颁发(CA机构)

1、服务端向CA机构提供身份信息 + 公钥,由CA机构的私钥进行签名颁发证书,证书内含有服务端的身份信息 + 公钥 + CA签名;

  • 身份信息:公司、网站、域名等等信息;
  • 公钥:服务器自己的公钥,CA机构会对其进行加密,放在证书中;

2、客户端在与服务端建立连接时,需要拿到服务端的证书,并使用提前预置在操作系统中的CA根证书对其进行验证,证明服务端的身份,保证证书不被伪造,即公钥不被替换;防止了中间人篡改;

  • 重点:根证书预置在操作系统中,不需要网络就可以验证服务器证书;
  • 根证书可以对服务器证书的公钥进行解密获取;安全的获取公钥;