证书

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。

证书格式的格式普遍采用的是X.509V3国际标准,一个标准的X.509数字证书包含以下一些内容:

  • 证书的版本信息;
  • 证书的序列号,每个证书都有一个唯一的证书序列号;
  • 证书所使用的签名算法;
  • 证书的发行机构名称,命名规则一般采用X.500格式;
  • 证书的有效期,通用的证书一般采用UTC时间格式,它的计时范围为1950-2049;
  • 证书所有人的名称,命名规则一般采用X.500格式;
  • 证书所有人的公开密钥;
  • 证书发行者对证书的签名。

如何验证证书的合法性?

核心是证书链。
**
服务端返回给客户端的证书是一个证书链的结构。客户端拿到后,除了需要验证域和有效期外,还要检查证书链中的上级证书公钥是否有效,一直向上回溯,直到根证书公钥为止。由于浏览器会内置一些可信任的根证书,如果该根证书与浏览器的可信任的根证书匹配,那就说明该证书是可信任的。

数字签名

数字签名是证书的防伪标签,是将待签名内容通过哈希和私钥加密处理后形成的。目前使用最广泛的 SHA-RSA 数字签名的制作和验证过程如下:

  1. 数字签名的签发。首先是使用哈希函数对待签名内容进行安全哈希,生成数字摘要,然后使用CA自己的私钥对数字摘要进行加密。
  2. 数字签名的校验。使用CA的公钥解密签名,然后使用相同的签名函数对待签名证书内容进行签名并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功。

涉及到的算法

非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256

参考资料