一直对电子证书的文件后缀比较头大,搞不清这些后缀的关系,终于在网上搜到一个比较简明的文章,试着翻译一下:)node
本至上,X.509证书是一个数字文档,这个文档根据RFC 5280来编码并/或签发。linux
实际上,“X.509证书”常常被用来指代IETF的PKIX(Public Key Infrastructure)证书和X.509 v3 证书标准中的CRL(Certificate Revocation List)。算法
首先咱们要理解文件的扩展名表明什么。DER、PEM、CRT和CER这些扩展名常常使人困惑。不少人错误地认为这些扩展名能够互相代替。尽管的确有时候有些扩展名是能够互换的,可是最好你能肯定证书是如何编码的,进而正确地标识它们。正确地标识证书有助于证书的管理。安全
.DER = 扩展名DER用于二进制DER编码的证书。这些证书也能够用CER或者CRT做为扩展名。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。工具
.PEM = 扩展名PEM用于ASCII(Base64)编码的各类X.509 v3 证书。文件开始由一行"—– BEGIN …“开始。编码
.CRT = 扩展名CRT用于证书。证书能够是DER编码,也能够是PEM编码。扩展名CER和CRT几乎是同义词。这种状况在各类unix/linux系统中很常见。加密
CER = CRT证书的微软型式。能够用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。扩展名为CER的文件能够被IE识别并做为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。spa
.KEY = 扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥能够是DER编码或者PEM编码。翻译
CRT文件和CER文件只有在使用相同编码的时候才能够安全地相互替代。unix
1.从pfx格式的证书提取出密钥和证书
set OPENSSL_CONF=openssl.cnf
openssl pkcs12 -in my.pfx -nodes -out server.pem
openssl rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt
PEM格式的证书与DER格式的证书的转换
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
openssl x509 -in ca.cer -inform DER -out ca.pem -outform PEM
几种典型的密码交换信息文件格式:
DER-encoded certificate: .cer, .crt
PEM-encoded message: .pem
PKCS#12 Personal Information Exchange: .pfx, .p12
PKCS#10 Certification Request: .p10
PKCS#7 cert request response: .p7r
PKCS#7 binary message: .p7b
.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。
.pem跟crt/cer的区别是它以Ascii来表示。
pfx/p12用于存放我的证书/私钥,他一般包含保护密码,2进制方式
p10是证书请求
p7r是CA对证书请求的回复,只用于导入
p7b以树状展现证书链(certificate chain),同时也支持单个证书,不含私钥
算法
base64不是加密算法,但也是SSL常用的一种算法,它是编码方式,用来把asc码和二进制码转来转去的。
openssl x509部分命令
打印出证书的内容:
openssl x509 -in cert.pem -noout -text
打印出证书的系列号
openssl x509 -in cert.pem -noout -serial
打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject
以RFC2253规定的格式打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
在支持UTF8的终端一行过打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
打印出证书的MD5特征参数
openssl x509 -in cert.pem -noout -fingerprint
打印出证书的SHA特征参数
openssl x509 -sha1 -in cert.pem -noout -fingerprint
把PEM格式的证书转化成DER格式
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
把一个证书转化成CSR
openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
给一个CSR进行处理,颁发字签名证书,增长CA扩展项
openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem
给一个CSR签名,增长用户证书扩展项
openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial