用户处理国密(SM2)证书时,必须使用支持国密算法的专用工具,如  `gmssl`  或特定版本的  `openssl`(如1.1.1k及以上)。标准的  `openssl`  工具链无法识别国密  SM2  私钥结构。

一、准备工作:检查并安装工具

执行转换前,请确认你使用的是支持国密的工具版本。

bash

#  检查  gmssl  是否已安装

gmssl  version

#  检查  openssl  版本,1.1.1k  或更高版本才可能支持国密

openssl  version

如果未安装,可以从  `gmssl.org`  下载源码或通过包管理器安装。

二、证书格式速览

格式      文件后缀      编码      典型用途  

PEM          `.pem`,  `.crt`,  `.cer`      Base64文本      Linux/Nginx/Apache等,最常见、可读性强  

DER          `.der`,  `.cer`    二进制      部分Java应用或设备  

PFX  /  PKCS#12          `.pfx`,  `.p12`    二进制  |  Windows/IIS平台,可同时包含证书、私钥和证书链  

三、核心转换命令

以下是三种核心格式的互相转换命令。所有命令均基于  `gmssl`  编写,若你使用的  `openssl`  支持国密,也可直接套用。

1.  PEM  ↔  DER  互转

PEM  转  DER:

        bash

        gmssl  x509  -in  cert.pem  -outform  der  -out  cert.der

DER  转  PEM**:

        bash

        gmssl  x509  -in  cert.der  -inform  der  -out  cert.pem

2.  PEM  ↔  PFX  互转**

PEM格式的证书和私钥通常是分开的两个文件,需要“打包”成一个PFX文件。反之,从PFX文件可以“解包”出PEM格式的证书和私钥。

PEM  (证书+私钥)  →  PFX  (打包)

        bash

        gmssl  pkcs12  -export  -out  certificate.pfx  -inkey  private.key  -in  certificate.crt  -certfile  ca_bundle.crt

        命令执行时会提示设置**导出密码**,这是保护PFX文件的关键。

        参数说明:

        `-inkey  private.key`:私钥文件。

        `-in  certificate.crt`:站点证书文件。

        `-certfile  ca_bundle.crt`:中间证书链文件(可选)。

PFX  →  PEM  (解包)

        ```bash

        #  提取私钥

        gmssl  pkcs12  -in  certificate.pfx  -nocerts  -out  private_key.pem  -nodes

        #  提取证书(不含私钥)

        gmssl  pkcs12  -in  certificate.pfx  -nokeys  -out  certificate.pem  -nodes

        ```

        命令执行时会要求输入导入密码,即打包PFX时设置的密码。`-nodes`参数表示不加密输出的PEM私钥。

3.  DER  ↔  PFX  转换

由于DER和PFX不直接转换,需要PEM作为“中转站”:

DER  →  PFX:`DER  →  PEM  →  PFX`

        bash

        gmssl  x509  -in  cert.der  -inform  der  -out  cert.pem

        gmssl  pkcs12  -export  -out  certificate.pfx  -inkey  private.key  -in  cert.pem

PFX  →  DER:`PFX  →  PEM  →  DER`

        bash

        gmssl  pkcs12  -in  certificate.pfx  -nokeys  -out  cert.pem  -nodes

        gmssl  x509  -in  cert.pem  -outform  der  -out  cert.der

四、实战补充:从国密双证书生成PFX

国密体系常采用签名证书和加密SSL证书的双证书模式。若要将这两个证书及其对应的私钥打包成一个PFX文件,可以使用以下命令。这里假设所有证书和私钥均为PEM格式。

bash

#  将国密签名证书、加密证书及对应的两个私钥打包进同一个PFX

gmssl  pkcs12  -export  -out  gm_dual.pfx  -inkey  sign.key  -in  sign.crt  -certfile  enc.crt  -inkey  enc.key  -name  "SM2  Dual  Certificates"

注意:`-inkey`参数只能出现一次,这里用`-certfile`引入了加密证书,再将加密私钥`enc.key`作为补充信息传递。具体语法可能因gmssl版本有差异,建议查阅官方文档确认。

注意事项

安全第一:转换过程中私钥会以明文形式在磁盘上短暂停留。建议仅在安全的离线环境中操作,转换完成后立即清理临时文件。导出未加密的私钥存在安全风险,仅限于离线调试环境使用。

保留完整证书链:确保转换后的证书文件(尤其是PFX文件)包含了完整的证书链(即站点证书+中间证书+根证书)。遗漏中间证书可能导致在某些客户端上验证失败。

在线转换工具:如果对命令行不熟悉,可以选择使用可信的在线转换工具,但务必通过HTTPS加密连接上传文件,以防私钥泄露。例如SSLeye提供了在线国密SM2证书格式转换服务。

如果需要了解其他特定场景的转换命令,可以告诉我。