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

2. 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 经常使用的一种算法,它是编码方式,用来把 ASCII 码和二进制码转来转去的。

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