基本

一. 证书和编码

X.509证书,其核心是根据RFC 5280编码或数字签名的数字文档 实际上,术语X.509证书通常指的是IETF的PKIX证书和X.509 v3证书标准的CRL 文件 即如RFC 5280(通常称为PKIX for Public Key Infrastructure(X.509))中规定的

二. X509文件扩展

我们首先要了解的是每种类型的文件扩展名。 很多人不清楚DER,PEM,CRT和CER结尾的文件是什么,更有甚者错误地说是可以互换的 在某些情况下,某些可以互换,最佳做法是识别证书的编码方式,然后正确标记 正确标签的证书将更容易操纵

三. 编码: 决定扩展名方式

1).DER 扩展名:

.DER = DER扩展用于二进制DER编码证书。
这些文件也可能承载CER或CRT扩展。
正确的说法是“我有一个DER编码的证书”不是“我有一个DER证书”

2).PEM 扩展名:

.PEM = PEM扩展用于不同类型的X.509v3文件,是以“ - BEGIN ...”前缀的ASCII(Base64)数据。

3)常见的扩展:

3.1).CRT 扩展名
.CRT = CRT扩展用于证书。 证书可以被编码为二进制DER或ASCII PEM。 CER和CRT扩展几乎是同义词。 最常见的于Unix 或类Unix系统。

3.2).CER扩展名
 CER = .crt的替代形式(Microsoft Convention)您可以在微软系统环境下将.crt转换为.cer(.both DER编码的.cer,或base64 [PEM]编码的.cer)

3.3).KEY 扩展名
   .KEY = KEY扩展名用于公钥和私钥PKCS#8. 键可以被编码为二进制DER或ASCII PEM

PKCS#7/P7B 格式:

//@added
PKCS#7 或 P7B格式通常以Base64的格式存储,扩展名为.p7b 或 .p7c
有类似BEGIN PKCS7-----" 和 "-----END PKCS7-----"的头尾标记
PKCS#7 或 P7B只能存储认证证书或证书路径中的证书(就是存储认证证书链,本级,上级,到根级都存到一个文件中)
不能存储私钥,Windows和Tomcat都支持这种格式
他是多个证书组织成的格式(一般是证书链)

PKCS#12/PFX 格式:

//@added
PKCS#12 或 PFX格式是以加密的二进制形式存储服务器认证证书,中级认证证书和私钥
扩展名为.pfx 和 .p12,PXF通常用于Windows中导入导出认证证书和私钥
其说是证书,不如叫它证书+私钥的package比较合适,一个文件即包含证书(证书链),也包含私钥

四. 常见的OpenSSL证书操作(重要)

证书操作有四种基本类型。查看,转换,组合和提取。 1)查看证书:

PEM编码的证书是ASCII,它们是不可读的。这里有一些命令可以让你以可读的形式输出证书的内容;
1.1)查看PEM编码证书
openssl x509 -in cert.pem -text
openssl x509 -in cert.cer -text
openssl x509 -in cert.crt -text
 如果您遇到这个错误,这意味着您正在尝试查看DER编码的证书,并需要使用“查看DER编码证书”中的命令
unable to load certificate
12626:error:0906D06C:PEMroutines:PEM_read_bio:no start line:pem_lib.c:647:Expecting: TRUSTEDCERTIFICATE

1.2)查看DER编码证书
openssl x509 -in certificate.der -inform der -text -noout
如果您遇到以下错误,则表示您尝试使用DER编码证书的命令查看PEM编码证书。在“查看PEM编码的证书”中使用命令
unable to load certificate
13978:error:0D0680A8:asn1 encodingroutines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1306:
13978:error:0D07803A:asn1 encodingroutines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:380:Type=X509

2)转换证书格式:

转换可以将一种类型的编码证书存入另一种(即PEM与DER间互转)
PEM到DER
openssl x509 -in cert.crt -outform der -out cert.der
DER到PEM
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

//@added
PEM to P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
P7B to PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

PEM to PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
PFX to PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

3)组合证书:

在某些情况下,将多个X.509基础设施组合到单个文件中是有利的
一个常见的例子是将私钥和公钥两者结合到相同的证书中
组合密钥和链的最简单的方法是将每个文件转换为PEM编码的证书
然后将每个文件的内容简单地复制到一个新文件中
这适用于组合文件以在Apache中使用的应用程序

4)证书提取:

一些证书将以组合形式出现,一个文件可以包含以下任何一个:
证书,私钥,公钥,签名证书,证书颁发机构(CA)和/或权限链