数字证书

密码学基础

对称加密与非对称加密

  • 对称加密过程中,Alice和Bob使用相同的密钥进行数据加密
  • 非对称加密过程中,密钥由(公钥,私钥)密钥对构成。
    • 非对称密钥加解密:Alice与Bob通信过程中,Alice首先在公开信道上发送公钥。Bob使用Alice的公钥加密信息,随后Alice使用自己的私钥进行解密。
    • 非对称密钥签名:Alice使用私钥加密签名消息,Bob使用Alice的公钥对签名进行相关验证,以确认Alice的身份。

特点及应用场景

由于对称加密具有更快的数据传输速度,而非对称加密具有更高的安全性,故实际应用过程中常常通过非对称加密的公钥对对称加密的密钥进行加密处理,随后接收方使用私钥进行解密,至此双方实现密钥共享。之后二者便可以用相同的对称加密密钥实现对大量数据的对称加解密过程。

数字证书

相关概念

数字证书(Digital Certificate or Public Key Certificate)指在互联网通讯中标志通讯各方身份信息的数字认证,在网络中使用其识别对方身份,本质上是一种身份证明电子文档。

证书授权中心CA(Certificate Authority)负责发放和管理数字证书,具有足够的权威性。

证书分类

按照持有者可分为个人证书、单位证书及系统证书。

按照证书用途可分为签名证书及加密证书,具体区别如下:

  • 签名证书用于签名和验证签名,为确保密钥安全,一般在客户端产生和保存密钥对。
  • 加密证书用于加密,密钥对由CA产生,通过保护算法和协议发送给用户使用,同时CA中心对该密钥进行备份处理。

证书格式

证书具有PEM和DER两种编码格式,其中PEM采用Base64编码字符保存,而DER格式采用二进制保存。

一张证书包含非对称加密密钥对,通常用.crt后缀标识公钥,用.key后缀标识私钥。还有一种将公钥与私钥捆绑保存的方法,其后缀通常为.pfx或.p12。

证书内容

证书公钥除保存公钥内容外,通常包含颁发者、使用者、有效期和签名等信息。

证书私钥中包含公钥信息以及所有非对称加密算法的参数。

证书信任链

  • CA:数字证书认证中心的简称。
  • 根CA:处在信任链的顶端,其证书公钥默认导入各种操作系统和浏览器中。
  • 中级CA:处于信任链的中部,由根CA或其他中级CA颁发的证书,本身还可以继续颁发子证书。
  • 个人证书:处在信任链末端,由中级CA或根CA颁发的证书。

  • 证书之间的信任关系可以嵌套。只要信任链上的头部证书,则后续证书均可信任。证书链的存在作用为降低中级CA私钥泄露造成的影响。

CA链.png-189.8kB

证书吊销列表

为防止证书持有者泄露证书私钥造成的身份冒用,各CA都维护一张CRL列表,内部标记虽处于有效期内但无法正常使用的证书。

证书工作原理

数字证书生成

服务器给客户端发送公钥的过程中,将公钥与服务器的个人信息通过哈希算法生成消息摘要。为防止摘要被人调换,服务器还会用CA提供的私钥对消息摘要进行加密,从而形成数字签名。最后服务器将未经哈希处理的信息与数字签名合并在一起形成数字证书。

certificate_generation.png-47.7kB

数字证书验证

客户端收到数字证书后,使用CA提供的公钥对数字证书内部的数字签名进行解密得到消息摘要,随后对数字证书内部服务器的公钥和个人信息进行哈希计算以获取另外一份消息摘要。对比这两份摘要,若吻合则通过服务器身份验证,否则不通过验证。

certificate_verification.png-108.7kB

SSL

SSL(Secure Sockets Layer,安全套接层)是HTTPS下的协议加密层,建立在可靠的传输协议上,为高层协议提供数据封装、压缩、加密等基本功能,主要分为以下两层:

SSL记录协议层

SSL记录协议层为高层协议提供基本的安全服务,记录封装各种高层协议,具体实施压缩解压缩、加密解密、计算和校验MAC等与安全有关的操作。

SSL握手协议层

SSL握手协议层包括SSL握手协议(SSL HandShake Protocol)、SSL密码参数修改协议(SSL Change Cipher Spec Protocol)、应用数据协议(Application Data Protocol)和SSL告警协议(SSL Alert Protocol)。这些协议用于SSL管理信息的交换,允许应用协议传送数据之前相互验证,执行协商加密算法和生成密钥等操作,以建立同步状态。

SSL单向认证过程

SSL单向认证.png-260kB

单向认证过程中只进行客户端对服务器的认证。客户端首先向服务器发送Client Hello数据包,包含随机数A以及可供选择的加密套件与加密算法参数。服务器收到后回复Server Hello数据包,包含随机数B及服务器选择的加密套件,随后回复证书链并完成服务器数据发送。客户端收到后验证服务器证书链并发送使用服务器公钥加密后的随机数C,服务器端使用私钥对客户端发送信息进行解密以获取随机数C。至此双方均获得随机数A、B、C,使用这三个随机数并结合服务器选择的加密套件,对数据流进行对称加密,实现安全传输。

SSL双向认证过程

SSL双向认证.png-325.8kB

与单向认证相比,双向认证过程中除进行客户端对服务器证书链的验证外,还包含服务器对客户端的证书链验证操作,从而实现双向安全认证。

请作者吃个小鱼饼干吧