证书格式及其转换

https://blog.csdn.net/luo15242208310/article/details/108195803

参考链接:der pem cer crt key pfx等概念及区别
参考连接:Java 证书管理(keytool实例),jks\crt\cet\ketstore

编码格式
X.509 - 当前最流行的证书标准,有以下两种编码格式.

PEM DER
全称 Privacy Enhanced Mail Distinguished Encoding Rules
存储方式 base64编码
-----BEGIN XXX-----
BhMCY24x…
-----END XXX----- 二进制格式
是否可读 可读 不可读
存储内容 包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)和 (x509) 证书。
它存储用 Base64 编码的 DER 格式数据,用 ascii 报头包围,因此适合系统之间的文本模式传输 包含所有私钥、公钥和证书。
它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。
它是无报头的,PEM 是用文本报头包围的 DER
适用方向 Apache、Nginx Java、Windows服务器
证书编码的转换

# PEM转为DER
openssl x509 -in cert.crt -outform der -out cert.der
# DER转为PEM
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

注:
要转换KEY文件也类似,只不过把x509换成rsa,要转CSR的话,把x509换成req…

证书相关的文件类型
常见的扩展名除了PEM和DER还有以下这些,它们除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换编码格式.

类型 内容 编码
crt 证书(不包括私钥) pem | der
cer 证书(不包括私钥) pem | der
key 公钥或者私钥,并非X.509证书 pem | der
csr 证书签名请求(包含公钥) pem | der
pfx/p12 PKCS#12,包含公钥和私钥的二进制格式证书
PFX通常会有一个"提取密码" der
p7b 以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥
jks Java Key Storage利用Java的keytool工具
keypass: 指定别名条目的密码(私钥的密码)
storepass: 指定密钥库的密码(获取keystore信息所需的密码)
证书格式转换
一般来说,主流的Web服务软件,通常都基于OpenSSL和Java两种基础密码库。

格式 工具 平台
KEY&CRT openssl
xca(UI工具) Apache、Nginx等
PFX openssl
xca
windows自带证书库 微软Windows Server中的
Internet Information Services(IIS)服务,
使用Windows自带的证书库生成PFX格式的证书文件
JKS keytool
kse(UI工具) Tomcat、Weblogic、JBoss等
一般使用Java提供的密钥库,通过Keytool工具,生成Java Keystore(JKS)格式的证书文件
KDB iKeyman IBM的Web服务产品,如:
Websphere、IBM Http Server(IHS)等
一般使用IBM产品自带的iKeyman工具,生成KDB格式的证书文件
证书格式之间的转换如下图:


转换cert+key为pfx

openssl pkcs12 -export -in server.crt -inkey server.key -out server.pfx

pfx转换jks

keytool -importkeystore -srckeystore D:\server.pfx -destkeystore D:\server.jks -srcstoretype PKCS12 -deststoretype JKS

 

转换jks为pfx

keytool -importkeystore -srckeystore D:\server.jks -destkeystore D:\server.pfx -srcstoretype JKS -deststoretype PKCS12

将pfx转换为pem/key/crt

# 提示你输入提取代码,server.pem就是可读的文本
openssl pkcs12 -in server.pfx -nodes -out server.pem
openssl rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt

转换key为pk8
注:用于Netty SslContextBuilder中指定key文件(非加密)

openssl pkcs8 -topk8 -in server.key -out pkcs8_server.key -nocrypt

上一篇:ReactiveCocoa源码解析(二) Bag容器的代码实现


下一篇:nginx创建证书