以下是使用 OpenSSL 进行证书管理和操作的常用命令及说明
OpenSSL x509 命令
查看证书信息
openssl x509 -in signed.crt -noout -dates # 打印证书的过期时间
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
openssl x509 -in cert.pem -noout -fingerprint # 打印证书的 MD5 指纹
openssl x509 -sha1 -in cert.pem -noout -fingerprint # 打印证书的 SHA 指纹
格式转换
将 PEM 格式的证书转为 DER 格式
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
证书与 CSR 相关操作
# 将证书转为 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
# 查看 CSR 文件细节
openssl req -in my.csr -noout -text
SSL 私钥管理
证书私钥 (PrivateKey) 添加和去除密码
检测私钥密码是否正确
$ openssl rsa -text -noout -in server.key
Private-Key: (2048 bit)
modulus:
00:b0:fd:c2:81:60:3f:d2:dc:fe:2d:34:c6:46:1e:
08:72:c3:78:f3:4d:12:16:b9:39:3e:0b:d3:8b:e7:
…
添加私钥密码
系统会提示输入并确认密码, 生成加密后的私钥文件 encrypt.key
$ openssl rsa -des -in server.key -out encrypt.key
writing RSA key
Enter PEM pass phrase: # 输入密码
Verifying - Enter PEM pass phrase: # 再次输入密码
encrypt.key # 这个文件就是加密过的私钥
移除私钥密码
系统会提示输入原密码, 生成移除密码的私钥文件 nopassword.key
$ openssl rsa -in encrypt.key -out nopassword.key
writing RSA key
Enter PEM pass phrase: # 输入密码
Verifying - Enter PEM pass phrase: # 再次输入密码
移除 PKCS#12 (.pfx
或 .p12
) 私钥密码
当拿到一个包含私钥和公钥的 PKCS#12 格式证书 (.pfx
或 .p12
文件), 并需要将 PKCS#12 格式转换为 PEM 格式, 然后移除私钥密码
查看证书信息
openssl pkcs12 -info -in cert.pfx
格式转换
将 PKCS#12 转为 PEM
openssl pkcs12 -in cert.pfx -out cert2.pem
分离公钥和私钥
# 提取公钥
openssl x509 -in cert2.pem -out cert2.crt
# 提取私钥
openssl rsa -in cert2.pem -out cert2.key
移除私钥密码
openssl rsa -in cert2.key -out cert22.key
合并成新的 PFX 文件
openssl pkcs12 -export -inkey cert22.key -in cert2.crt -out cert2.pfx
转换回 PEM 格式
openssl pkcs12 -in cert2.pfx -out cert22.pem