深色模式
关于数字证书
什么是数字证书?
知道了数字签名,就很好理解数字证书了,简单来讲,数字证书就是公钥pub_key
的数字签名,加上一些额外信息。
在通信过程中,数字证书的作用,是证明公钥的合法性。
数字证书的使用流程
用户申请证书
用户生成自己的密钥对,然后拿公钥向CA申请证书,所谓证书,要证明的就是这个公钥是合法的。
在某某云那里申请数字证书的时候,为了方便用户,云服务商会代为生成一份密钥对(帮我们省略了“生成自己的密钥对”这一步),然后再向CA申请证书。密钥只能下载一次,云服务商不会保存此密钥。
CA签发证书
CA机构用自己的专用私钥对申请者的公钥签名,就得到用户公钥的数字签名,再附上一些证书相关的信息如证书签发机构、证书持有者、有效期等,就是数字证书了。
所以总结来说,数字证书中主要包含以下内容:
- 公钥:用户的公钥。
- 公钥的数字签名:用CA私钥签名得到用户公钥的数字签名,其他用户凭借CA公钥就可以验签,而权威CA的公签都已预置在用户的操作系统和浏览器中。
- 证书信息:证书签发机构、证书持有者、有效期等。
- 证书链信息:对终端用户提供服务的CA机构一般不是根CA机构,他们是由根CA认证过的CA,所以,普通CA在签发证书时会附上自己上游签发的CA证书信息,一直溯及根CA,形成一条证书信任链。
普通人只要手里有密钥对,就能生成数字证书,但由于手里的密钥对没有经过权威CA的认证,这种数字证书在其他人的设备上无法通过证书信任链获得设备的信任,所以是“不受信任的证书”。
用户发送数据
用户发送数据时,用自己的私钥对数据签名,再附上公钥的数字证书。
接收者验证数据
接收者首先对数字证书进行验证,如果证书合法,再用证书中的公钥去验证数字签名,如果验证通过,说明收到的数据是可信任的。
一般,收到的数据是经过对称加密的,这里不再展开。
证书内容格式
数字证书的格式普遍采用的是 X.509 V3 国际标准,一个标准的 X.509 数字证书包含以下一些内容:
- 证书
- 版本号
- 序列号
- 签名算法
- 颁发者
- 证书有效期
- 此日期前无效
- 此日期后无效
- 主题
- 主题公钥信息
- 公钥算法
- 主题公钥
- 颁发者唯一身份信息(可选项)
- 主题唯一身份信息(可选项)
- 扩展信息(可选项)
- ...
- 证书签名算法
- 数字签名
证书文件格式(证书存储格式)
常见的Web服务软件,使用的证书文件格式:
- Tomcat、Weblogic、JBoss等Web服务软件,一般使用Java提供的密码库。通过Java Development Kit(JDK)工具包中的Keytool工具,生成Java Keystore(JKS)格式的证书文件。
- Apache、Nginx等Web服务软件,一般使用OpenSSL工具提供的密码库,生成PEM、KEY、CRT等格式的证书文件。
- IBM的Web服务产品,如Websphere、IBM Http Server(IHS)等,一般使用IBM产品自带的iKeyman工具,生成KDB格式的证书文件。
- 微软Windows Server中的Internet Information Services(IIS)服务,使用Windows自带的证书库生成PFX格式的证书文件。
常见的证书格式说明:
文件后缀 | 文件类型 | 说明 |
---|---|---|
.DER 或.CER | 二进制 | 只含有证书信息,不包含私钥。 |
.CRT | 二进制或文本 | 只含有证书信息,不包含私钥。 |
.PEM | 文本 | 一般存放证书或私钥,或同时包含证书和私钥。.PEM 文件如果只包含私钥,一般用.KEY 文件代替。 |
.PFX 或.P12 | 二进制 | 同时包含证书和私钥,且一般有密码保护。 |