X.509
密码学里公钥证书的格式标准。SSL/TLS中的证书格式即采用X.509。
是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准。事实上的X.509指的是RFC5280里面定义的X.509 v3,包括对IETF的PKIX证书和证书吊销列表,通常也称为公钥基础设施。
编码格式
同样的X.509证书,可能有不同的编码格式,目前有以下两种编码格式。
- PEM (Privacy Enhanced Mail)
- 打开看是文本格式,以"-----BEGIN..."开头, "-----END..."结尾,内容是BASE64编码.
- 查看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服务器偏向于使用这种编码格式.
相关的文件扩展名
已经有PEM和DER两种编码格式,但是文件扩展名不一定叫做“PEM”和“DER”。还有的具有这个扩展名的文件可能并不是证书,比如说可能只是保存了私钥。
- CRT
- 应该是certificate的三个字母,还是证书的意思。常见于类UNIX系统,可能是PEM编码,也可能是DER编码。大多数是PEM编码
- CER
- 还是certificate。常见于Windows系统,可能是PEM编码,也可能是DER编码。大多数是DER编码
- KEY
- 通常用来存放公钥或者私钥,并非X.509证书。编码可能是PEM也可能是DER
- 查看KEY的办法:openssl rsa -in <mykey.key> -text -noout
- 如果是DER格式的话,同理应该这样了:openssl rsa -in <mykey.key> -text -noout -inform der
- CSR (Certificate Signing Request)
- 即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请
- 其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好
- 查看的办法:openssl req -noout -text -in my.csr (如果是DER格式的话照旧加上-inform der)
- PFX/P12
- P12指的是PKCS #12格式。(可存储私钥和相关的X.509证书)
- PKCS #12是微软PFX文件的替代者。通常这两个词可相互替代使用。
- 这种格式标准巨复杂。
- PFX使用的是DER编码,转换为PEM编码命令
- openssl pkcs12 -in <for-iis.pfx> -out <for-iis.pem> -nodes
- 生成PFX格式文件命令
- openssl pkcs12 -export -in <certificate.crt> -inkey <privateKey.key> -out <certificate.pfx> -certfile <CACert.crt>
- P7B/P7C
- PKCS#7或者P7B格式以BASE64 ASCII格式存储,具有文件扩展名.p7b或者p7c
- P7B文件仅仅包含证书和信任链证书(中间CA),不包括私钥。
- 支持P7B文件的最常见平台是Windows和Java Tomcat。
参考资料: