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 \
-destkeystore Helloworld.pfx -deststoretype pkcs12 -deststorepass 18738892937lyj -destkeypass 18738892937lyj

将 PFX 格式证书转换为 JKS 格式

使用 JDK 中自带的 Keytool 工具,将 PFX 格式证书文件转换成 JKS 格式。

keytool -importkeystore -srckeystore xxx.pfx \
-destkeystore xxx.jks -srcstoretype PKCS12 -deststoretype JKS

将 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 rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt

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 
Usage: rand [options] num
where options are
-out file - write to file
-engine e - use engine e, possibly a hardware device.
-rand file:file:... - seed PRNG from files
-base64 - base64 encode output
-hex - hex encode output