.cer、crt 与 pem、pfx
.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥,含公钥。
.pem跟.crt/.cer的区别是它以Ascii码来表示(字符串)。
.pfx/.p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式
注:node服务器需要的是.pem格式的私钥与证书,iOS中需要的是.cer二进制格式的证书。
私钥公钥
//生产私钥
$ openssl genrsa 1024 > rsa_private_key.pem
//由私钥生产公钥
$ openssl rsa -in rsa_private_key.pem -pubout > rsa_public_key.pem
证书
//生产私钥
$ openssl genrsa 1024 > rsa_private_key.pem
//由私钥生产证书请求(签名)
$ openssl req -new -key rsa_private_key.pem -out certificate_request.csr
//通过私钥文件和CSR证书签名生成证书文件(服务器证书)
$ openssl x509 -req -days 365 -in certificate_request.csr -signkey rsa_private_key.pem -out cert.crt
//转换证书(丢至Xcode项目中)
$ openssl x509 -in cert.crt -out cert_ios.cer -outform der
证书格式转换
//.p12转.pem
$ openssl pkcs12 -in cert.p12 cert.pem -nodes
//.cer 转 .pem
$ openssl x509 -inform der -in certificate.cer -out certificate.pem
//.pem 转 .cer
$ openssl x509 -in certificate.pem -out certificate.cer -outform der
注:
证书与编码
本至上,X.509证书是一个数字文档,这个文档根据RFC 5280来编码并/或签发。
实际上,“X.509证书”经常被用来指代IETF的PKIX(Public Key Infrastructure)证书和X.509 v3 证书标准中的CRL(Certificate Revocation List)。
X509 文件扩展名
首先我们要理解文件的扩展名代表什么。DER、PEM、CRT和CER这些扩展名经常令人困惑。很多人错误地认为这些扩展名可以互相代替。尽管的确有时候有些扩展名是可以互换的,但是最好你能确定证书是如何编码的,进而正确地标识它们。正确地标识证书有助于证书的管理。
编码 (也用于扩展名)
.DER = 扩展名DER用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。
.PEM = 扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书。文件开始由一行"—– BEGIN …“开始。
.csr = 证书签发请求(Certificate Signing Request)
常用的扩展名
.CRT = 扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。这种情况在各种unix/linux系统中很常见。
.CER = CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。
.KEY = 扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。
CRT文件和CER文件只有在使用相同编码的时候才可以安全地相互替代。