数字证书

背景

数字证书又称公开密钥证书、公钥证书等。是用于公开密钥基础建设的电子文件,用来证明公开密钥拥有者的身份。此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误。拥有者凭着此文件,可向计算机系统或其他用户表明身份。如果你信任签发的机构,就可以信任证书上的密钥,凭公钥加密与拥有者进行可靠的通信。

数字证书技术细节

X.509 是密码学里公钥证书的格式标准。X.509 证书己应用在包括TLS/SSL在内的众多 Intenet协议里.同时它也用在很多非在线应用场景里。X.509最早与X.500一起发布于1988年7月3日。后来又做了两次修订,最新标准是X.509v3。

证书结构

一般有以下几部分组成:

  • 版本号
  • 序列号
  • 签名算法
  • 颁发者
  • 有效期(在有效期前后都是无效的)
  • 主体名(即证书所指的用户或组织)
  • 主体公钥信息(公钥算法,主题公钥)
  • 颁发者唯一身份信息(可选)
  • 主体唯一身份信息(可选)
  • 扩展信息(可选)
  • 证书签名算法
  • 数字签名

证书的生成与使用

证书生成

  1. 申请者生成一对足够强的秘钥,并对私钥进行保密
  2. 申请者将公钥连同其他信息组成证书请求发送给注册机构
  3. 注册机构验证申请者是公钥的持有人,验证方法有很多,如要求申请人用私钥对请求进行数字签名,注册机构用公钥验证。
  4. 验证成功后,注册机构将申请人的公钥、主体信息及有效期等一些信息组成证书基本数据
  5. 注册机构用自己的私钥对证书进行签名
  6. 将签名好的证书颁发给申请人

证书使用

  1. 证书所有者将自己的证书对外公开
  2. 第三方用注册机构的公钥验证证书签名,确保证书是可信的机构颁发的
  3. 验证成功后可以利用公钥对消息进行加密然后与证书所有者进行通信

证书的验证

证书层次

证书机构(CA)在实际中是分层的,假设A和B分属不同的子CA,如A属于CA20,B属于CA242,二者互相不知道对方CA的公钥。所以要获得这两个CA的证书,他们的证书由其上一级CA签名,一直到根CA。对于根CA的证书一般都固定到软件中,有了根CA的公钥就可以层层验证下面子CA的证书,这样就可以确保子CA的可信。

交叉证书

若A与B位于不同国家,可能各个国家有自己的根CA,而国家自己没有再高一级的CA。这是就无法确保获得的对应根CA的有效性。这是可以进行交叉证书。如A属于中国,B属于美国。这是中国的根CA获得一个由美国根CA颁发的证书,同样美国的根CA也获得一个由中国跟CA颁发的证书。这样,A本来就拥有中国根CA的证书,用其公钥验证美国的根CA是否值得信任,然后获得美国根CA的证书与公钥,与处在美国的B进行可信通信。

证书的吊销

脱机证书吊销状态检查

需要一个证书吊销表(CRL),这个表不包括过期的证书,只包含因故吊销的证书。这个表按照固定时间更新,用户定期下载这个表。之所以成为脱机,是因为在更新间隔内,用户只用检查本地的表即可。当用户收到一个证书后进行如下检查

  1. 有效期检查
  2. 有效性检查,即CA的签名是否正确
  3. 查询CRL检查是否被吊销

联机证书状态协议

主要是CA提供一个服务器,可以实时查询证书状态,验证证书是否吊销

题图来自unsplash:https://unsplash.com/photos/9NUeLk0uqME