前言:

Windows 当中通常证书所使用的格式是pfx证书,pfx证书通常会附带公钥与私钥.即有Public key Cryptography Standards #12 ,PKCS#12来进行了标准定义,包涵公钥与私钥的二进制证书形式,其结尾通常为pfx 或 p12而cer或者Base64是只包涵二进制编码的证书,且只会包涵公钥。且文件以cer作为结尾

本次使用opessl工具进行将pfx与x509格式的pem证书之间进行相互转换操作

X509(PEM格式的)转PFX格式:

 1[root@hz-k8s-harbor-199-152-10 certification]# openssl pkcs12 -name "servyou-it" -export -inkey servyou-it.com.key -in servyou-it.com.pem  -out servyou-it.pfx
 2Enter Export Password:
 3Verifying - Enter Export Password:
 4# -name用于配置一个友好名称在Windows当中用于显示,可以随意填写
 5# pfx证书为保证安全需要输入密码。此处可以不输入直接敲击回车
 6[root@hz-k8s-harbor-199-152-10 certification]# ls
 7servyou-it.com.key  servyou-it.com.pem  servyou-it.pfx
 8
 9
10#如果 该CA为自签的CA最好在pfx证书上添加上根CA的公钥信息 参数为-CAfile ca.pem

PFX转X509:

 1[root@hz-k8s-harbor-199-152-10 tmp]# openssl pkcs12 -in servyou-it.pfx  -nodes -out servyou-it-all.pem
 2Enter Import Password:
 3MAC verified OK
 4# 命令当中“-nodes”的作用是:don't encrypt private keys
 5# 导出的证书为一张 servou-it-all.pem的全量证书,因此需要对证书进行额外的公钥与私钥分离生成pem格式证书
 6# 生成私钥
 7[root@hz-k8s-harbor-199-152-10 tmp]# openssl rsa -in servyou-it-all.pem  -out servyou-it.key
 8writing RSA key
 9# 生成公钥
10[root@hz-k8s-harbor-199-152-10 tmp]# openssl x509  -in servyou-it-all.pem  -out servyou-it.pem
11
12# 需要注意的是生成后的公钥会与原公钥的格式有略微差别,但其表达的内容与之前完全一致
13[root@hz-k8s-harbor-199-152-10 tmp]# openssl x509 -in servyou-it.pem  -noout -text  > text1
14[root@hz-k8s-harbor-199-152-10 tmp]# openssl x509 -in ~/certification/servyou-it.com.pem  -noout -text  > text2
15[root@hz-k8s-harbor-199-152-10 tmp]# diff  text1  text2