数字证书常见标准

* 符合PKI ITU-T X509标准,传统标准(.DER .PEM .CER .CRT)
* 符合PKCS#7 加密消息语法标准(.P7B .P7C .SPC .P7R)
* 符合PKCS#10 证书请求标准(.p10)
* 符合PKCS#12 个人信息交换标准(.pfx *.p12)
X509是数字证书的基本规范,而P7和P12则是两个实现规范,P7用于数字信封,P12则是带有私钥的证书实现规范。
x509

基本的证书格式,只包含公钥。
x509证书由用户公共密钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。

PKCS#7

Public Key Cryptography Standards #7。

PKCS#7一般把证书分成两个文件,一个公钥、一个私钥,有PEM和DER两种编码方式。PEM比较多见,是纯文本的,一般用于分发公钥,看到的是一串可见的字符串,通常以.crt,.cer,.key为文件后缀。DER是二进制编码。
PKCS#7一般主要用来做数字信封。

PKCS#10

证书请求语法。

PKCS#12

Public Key Cryptography Standards #12。
一种文件打包格式,为存储和发布用户和服务器私钥、公钥和证书指定了一个可移植的格式,是一种二进制格式,通常以.pfx或.p12为文件后缀名。
使用OpenSSL的pkcs12命令可以创建、解析和读取这些文件。
P12是把证书压成一个文件,xxx.pfx
。主要是考虑分发证书,私钥是要绝对保密的,不能随便以文本方式散播。所以P7格式不适合分发。.pfx中可以加密码保护,所以相对安全些。

PKCS系列标准

实际上PKCS#7、PKCS#10、PKCS#12都是PKCS系列标准的一部分。相互之间并不是替代的关系,而是对不同使用场景的定义。

证书编码格式

PEM和DER两种编码格式。

PEM

Privacy Enhanced Mail
查看内容,以"-----BEGIN..."开头,以"-----END..."结尾。
查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout
Apache和*NIX服务器偏向于使用这种编码格式。

DER

Distinguished Encoding Rules
打开看是二进制格式,不可读。
查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout
Java和Windows服务器偏向于使用这种编码格式。

各种后缀含义

文件的内容和后缀没有必然的关系,但是一般使用这些后缀来表示这是什么文件。

JKS

Java Key Store(JKS)。

CSR

证书请求文件(Certificate Signing Request)。
这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的个人信息)。
查看的办法:openssl req -noout -text -in my.csr,DER格式的话加上-inform der。

CER

一般指使用DER格式的证书。

CRT

证书文件。可以是PEM格式。

KEY

通常用来存放一个公钥或者私钥。
查看KEY的办法:openssl rsa -in mykey.key -text -noout
如果是DER格式的话,同理应该这样了:openssl rsa -in mykey.key -text -noout -inform der
这是使用RSA算法生成的key这么查看,DSA算法生成的使用dsa参数。

CRL

证书吊销列表 (Certification Revocation List),是一种包含撤销的证书列表的签名数据结构。