https传输过程梳理和数字签名、数字证书相关概念总结

535 阅读6分钟

我正在参加「掘金·启航计划」。

前段时间详细看了网络上关于https传输和数字签名、数字证书等博文,特此整理文章并做总结以作学习和日后复习。

一、引言

https,即超文本传输安全协议(Hypertext Transfer Protocol Secure),是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议(TLS是在SSL基础上扩展的),主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。本文首先对数字签名、数字证书、CA、对称加密和非对称加密作介绍。

二、数字签名、数字证书、和CA的概念

我们在上网的时候,对于陌生的网站由于怀疑对方身份的可靠性,会借助数字证书进行身份认证,而为这个可靠性担保的就是CA机构。完成身份认证便可以进行进一步的通信。在客户端浏览器和服务端进行通信的过程中,通信的讯息是有可能被不法不良的中间人截取伪造的,此时借助数字签名技术便可以验证服务端传送的信息没有被篡改(不可抵赖性);同时为了避免私密信息在传输过程被泄漏,通信双方将使用非对称加密+对称加密的方式对明文隐匿。

2.1 数字签名

概念

  • 数字签名:是发送者(客户端)对发送的明文先使用摘要算法,即单向散列函数算法生成一个固定长度的摘要(digest),摘要是一个hash值。接着再使用发送者的私钥对摘要进行加密,然后把加密的摘要和发送者的公钥发送给请求者(客户端)。
  • 简单地说,数字签名就是摘要+公钥

验证过程

  • 数字签名的验证过程:
    客户端在拿到数字签名后,用发送者的公钥解开被加密的摘要,得到这个哈希值hash1,这是第一步。第二步是客户端再对服务端发来的明文,使用摘要算法得到一个摘要哈希值hash2,比对hash1hash2。如果这两个hash相同,那么就说明发送内容没有被篡改,即体现不可抵赖性。

疑问引出

  • 使用单向散列函数生成的摘要,是不可能逆向推导出原明文的,为什么还要进行加密呢?

    • 这是因为,恶意的中间人可能根本不想知道传输的内容,只想为了使接收端信任发来的内容是可信的而已,但是内容可能是中间人伪造的(发送伪造的明文和对应的digest)。但是如果摘要需要进行加密,中间人用他自己的私钥进行加密后,接受端用发送方的公钥是解不开的。所以数字签名可以保证内容确实是由发送方发送的,而且内容没有被篡改。
  • 如果恶意中间人或发送方伪造公钥,替换成自己的欺骗接收方怎么办?

    • 如果公钥被第三方替换,那么按照上面的流程也将验证通过,但是此时验证的内容将是伪造的不良信息。问题的根源就在于这个公钥的可靠性不确定。因此,CA机构和数字证书诞生。

2.2 CA机构

CA(Certification Authority)也叫“证书授权中心”。它是负责管理和签发证书的第三方机构,作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改。它是受大家信任的第三方,简单的说就是为发送者的可靠性和发送者的公钥做担保。

2.3 数字证书

数字证书(digital certificate)是由CA签发的一种较为权威与公正的电子文档。证书的内容包括:CA的信息,公钥用户的信息,服务端的公钥,CA的签名和有效期等等。

  • image.png
  • 根证书和中间证书
    中间证书由CA签发,它和根证书是层级关系,可以有多个中间证书。可以通过证书中对应的域找到它的上一级证书。
  • 此外证书也可以自己制作,自己给自己颁发,而它并不是权威的CA,如果你信任这些网站,就需要在自己的电脑上下载他们的证书安装,比如某些银行的网站,经常需要先安装证书。

验证过程

一般来说,我们的电脑上面会安装一些信任的证书,windows可以在开始运行中输入certmgr.msc来查看自己的电脑里安装了哪些证书。

  • 首先接收方会有CA颁发的可信任的根证书或中间证书,客户端即接收端使用https访问网站时,服务端先返回自己的证书(包含服务端公钥和其他信息如颁发机构,过期时间等等)。
  • 客户端用CA的公钥解密证书,得到服务端的公钥。
  • 因为CA的介入,这时候客户端得到的就是有保证的公钥了,那么再使用上面提到的数字签名技术就没有问题了,能够保证发送内容是客户端发送的并且没有被篡改。

2.4 非对称加密和对称加密

  • 非对称加密:存在一对密钥,即公钥和私钥。私钥保存于服务端,绝不可泄露。公钥指的是公共的密钥,对任何人公开。用公钥和私钥可以互相加解密。
  • 对称加密:信息的发送方和接收方使用同一个密钥去加密和解密数据,密钥泄漏加密算法即失效。

三、https传输过程

  1. 首先用户在浏览器里输入一个https网址,客户端发起https请求,连接到server的443端口。
  2. 服务端传送证书给客户端,证书包含证书的颁发机构,过期时间,网址,公钥等。
  3. 客户端解析证书。由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等。
    • 如果发现异常,则会弹出一个警告框,提示证书存在问题。
    • 如果证书没有问题,那么就生成一个随机值私钥client key。然后用证书公钥对该随机值进行加密。
  4. 传送对称加密密钥。把随机生成的client key加密后发送给服务端,使其获得这个私钥,以后客户端和服务端的通信就用这个私钥进行对称加密通信。
  • 图例示意https传输过程
    image.png

以上是对https传输过程的浅析,以及对相关概念的阐述。欢迎大家阅读指正。