参考链接: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