# 浅析主流数字证书的格式

- Link: https://www.xuepaijie.com/html/skill/coup/786.html
- Published: 2017-02-05T10:29:37+08:00
- Author: Admin

一般来说，主流的Web服务软件，通常都基于两种基础密码库：OpenSSL和Java。

Tomcat、Weblogic、JBoss等，使用Java提供的密码库。通过Java的Keytool工具，生成Java
Keystore（JKS）格式的证书文件。

Apache、Nginx等，使用OpenSSL提供的密码库，生成PEM、KEY、CRT等格式的证书文件。

此外，IBM的产品，如Websphere、IBM Http Server（IHS）等，使用IBM产品自带的iKeyman
工具，生成KDB格式的证书文件。微软Windows Server中的Internet Information Services（
IIS），使用Windows自带的证书库生成PFX格式的证书文件。

**如果您在工作中遇到带有后缀扩展名的证书文件，可以简单用如下方法区分：**

*.DER *.CER : 这样的证书文件是二进制格式，只含有证书信息，不包含私钥。

*.CRT : 这样的文件可以是二进制格式，也可以是文本格式，一般均为文本格式，功能与*.
DER/*.CER相同。

*.PEM : 一般是文本格式，可以放证书或私钥，或者两者都包含。 *.PEM如果只包含私钥，
那一般用 *.KEY代替。

*.PFX *.P12 是二进制格式，同时含证书和私钥，一般有密码保护。

**怎么判断是文本格式还是二进制？**

用记事本打开，如果是规则的数字字母，如

    ```html;
    —–BEGIN CERTIFICATE—–
    MIIE5zCCA8+gAwIBAgIQN+whYc2BgzAogau0dc3PtzANBgkqh......
    —–END CERTIFICATE—–
    ```

就是文本的，上面的BEGIN CERTIFICATE，说明这是一个证书；如果是BEGIN RSA PRIVATE KEY，
说明这是一个私钥。

**这些证书格式之间是可以互相转换的，以下提供了一些证书之间的转换方法：**

1. 将JKS转换成PFX

可以使用Keytool工具，将JKS格式转换为PFX格式。

    ```html;
    keytool -importkeystore -srckeystore server.jks -destkeystore server.pfx -srcstoretype JKS -deststoretype PKCS12
    ```

2. 将PFX转换为JKS

可以使用Keytool工具，将PFX格式转换为JKS格式。

    ```html;
    keytool -importkeystore -srckeystore server.pfx -destkeystore server.jks -srcstoretype PKCS12 -deststoretype JKS
    ```

3. 将PEM/KEY/CRT转换为PFX

使用OpenSSL工具，可以将密钥文件KEY和公钥文件CRT转化为PFX文件。

将密钥文件KEY和公钥文件CRT放到OpenSSL目录下，打开OpenSSL执行以下命令：

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

4. 将PFX转换为PEM/KEY/CRT

使用OpenSSL工具，可以将PFX文件转化为密钥文件KEY和公钥文件CRT。

将PFX文件放到OpenSSL目录下，打开OpenSSL执行以下命令：

    ```html;
    openssl pkcs12 -in server.pfx -nodes -out server.pem

    openssl rsa -in server.pem -out server.key
    ```

注意：此步骤是专用于使用keytool生成私钥和CSR申请证书，并且获取到pem格式证书公钥的
情况下做分离私钥使用的，所以在实际部署证书时请使用此步骤分离出来的私钥和申请下来
的公钥证书做匹配使用。
