SSL 证书格式说明
常见的 SSL 证书格式主要有:
.DER
.CER
- 文件是二进制格式,只保存证书,不保存私钥。.PEM
- 一般是文本格式,可保存证书,可保存私钥。.CRT
- 可以是二进制格式,可以是文本格式,一般均为文本格式,与.DER
格式相同,不保存私钥。.PFX
.P12
- 二进制格式,同时包含证书和私钥,一般有密码保护。.JK
- 二进制格式,同时包含证书和私钥,一般有密码保护。
证书格式说明
DER 和 CER
该格式是二进制文件内容,Java 和 Windows 服务器偏向于使用这种编码格式。只含有证书信息,不包含私钥
OpenSSL 查看
openssl x509 -in certificate.der -inform der -text -noout |
转换为 PEM:
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem |
PEM
Privacy Enhanced Mail,一般为文本格式,以 -----BEGIN...
开头,以 -----END...
结尾。中间的内容是 BASE64 编码。这种格式可以保存证书和私钥,有时我们也把 PEM 格式的私钥的后缀改为 .key
以区别证书与私钥。
这种格式常用于 Apache 和 Nginx 服务器。
OpenSSL 查看:
openssl x509 -in certificate.pem -text -noout |
转换为 DER:
openssl x509 -in cert.crt -outform der -out cert.der |
CRT
Certificate 的简称,有可能是 PEM 编码格式,也有可能是 DER 编码格式。如何查看请参考前两种格式。
PFX
Predecessor of PKCS#12,这种格式是二进制格式,且证书和私钥存在一个 PFX 文件中。一般用于 Windows 上的 IIS 服务器。该格式的文件一般会有一个密码用于保证私钥的安全。
OpenSSL 查看:
openssl pkcs12 -in for-iis.pfx |
转换为 PEM:
openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes |
JKS
Java Key Storage,很容易知道这是 JAVA 的专属格式,利用 JAVA 的一个叫 keytool 的工具可以进行格式转换。一般用于 Tomcat 服务器。
可以到这里进行 格式转换
证书格式转换
以下证书格式之间是可以互相转换的
将 JKS 格式证书转换成 PFX 格式
使用 JDK 中自带的 Keytool 工具,将 JKS 格式证书文件转换成 PFX 格式
keytool -v -importkeystore -srckeystore D:\apk\Helloworld.jks -srcstoretype jks -srcstorepass 18738892937lyj \ |
将 PFX 格式证书转换为 JKS 格式
使用 JDK 中自带的 Keytool 工具,将 PFX 格式证书文件转换成 JKS 格式。
keytool -importkeystore -srckeystore xxx.pfx \ |
将 PEM/KEY/CRT 格式证书转换为 PFX 格式
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt |
将PFX转换为PEM/KEY/CRT
可以使用 OpenSSL工具,将 PFX 格式证书文件转化为 KEY 格式密钥文件和 CRT 格式公钥文件
openssl pkcs12 -in server.pfx -nodes -out server.pem |
openssl 命令说明
常用命令选项
选项 | 说明 | 示例 |
---|---|---|
-in |
输入文件 | |
-out |
输出文件,默认为 stdout |
|
-inform |
输入文件格式 | DER or PEM |
-outform |
输出文件格式 | DER or PEM |
-keyform |
key 的格式,默认为 PEM |
|
-text |
输出文本格式的内容 | openssl x509 -text -in sverver.crt 打印证书文本内容 |
-noout |
不输出 REQ | openssl x509 -noout -text -in sverver.crt 打印证书文本格式的详情,不包括证书内容 |
查看证书内容
openssl x509 -text -noout -in server.crt |
使用 openssl 生成随机密码
几乎所有 Linux 发行版都包含 openssl。我们可以利用它的随机功能来生成可以用作密码的随机字母字符串。
openssl rand -base64 8 |
openssl rand
命令帮助信息
openssl rand |