详细讲解HTTP 的安全问题( 三 )


其实说白了,数字签名就是附加在报文上的特殊加密校验码 。
我们用一个例子来进行解释,我们先看一幅图,节点 A 是如何向节点 B 发送一条报文,并对其进行签名的 。

  1. 节点 A 将变长报文提取为定长的摘要 。
  2. 节点 A 对摘要应用了一个“签名”函数,这个函数会将用户的私有密钥作为参数 。因 为只有用户才知道私有密钥,所以正确的签名函数会说明签名者就是其所有者 。在图中,,由于解码函数 D 中包含了用户的私有密钥,所以我们将其作为签名函数使用 。
  3. 一旦计算出签名,节点 A 就将其附加在报文的末尾,并将报文和签名都发送给 B 。
  4. 在接收端,如果节点 B 需要确定报文确实是节点 A 写的,而且没有被篡改过,节点 B 就可以对签名进行检查 。节点 B 接收经私有密钥扰码的签名,并应用了使用公开 密钥的反函数 。如果拆包后的摘要与节点 B 自己的摘要版本不匹配,要么就是报文在传输过程中被篡改了,要么就是发送端没有节点 A 的私有密钥(也就是说它不是节点 A) 。
把图理解是,是不是关于数字签名就很好理解了呢?
6.数字证书我们来看一下百度百科对他的解释:数字证书是指CA(电子认证服务)机构发行的一种电子文档,是一串能够表明网络用户身份信息的数字,提供了一种在计算机网络上验证网络用户身份的方式,因此数字证书又称为数字标识 。数字证书对网络用户在计算机网络交流中的信息和数据等以加密或解密的形式保证了信息和数据的完整性和安全性 。
数字证书其实并没有我们想的那么难,数字证书的基本架构是公开密钥PKI,即利用一对密钥实施加密和解密 。其中密钥包括私钥和公钥,私钥主要用于签名和解密,由用户自定义,只有用户自己知道;公钥用于签名验证和加密,可被多个用户共享 。
HTTPS 建立了一个安全 Web 事务之后,现代的浏览器都会自动获取所连接服务器的 数字证书 。如果服务器没有证书,安全连接就会失败 。服务器证书中包含很多字段,其中包括:
  • Web 站点的名称和主机名;
  • Web 站点的公开密钥;
  • 签名颁发机构的名称;
  • 来自签名颁发机构的签名
浏览器收到证书时会对签名颁发机构进行检查 。1 如果这个机构是个很有权威的公共签名 机构,浏览器可能已经知道其公开密钥了(浏览器会预先安装很多签名颁发机构的证书) 。
如果对签名颁发机构一无所知,浏览器就无法确定是否应该信任这个签名颁发机构,它通 常会向用户显示一个对话框,看看他是否相信这个签名发布者 。签名发布者可能是本地的 IT 部门或软件厂商 。
是不是很容易理解呢?
文章参考:
《图解 HTTP》
《HTTP 权威指南》

【详细讲解HTTP 的安全问题】


推荐阅读