介紹如何在 Linux 中使用 OpenSSL 指令轉換 PEM、DER 與 PKCS #12 格式的憑證檔案。

SSL 憑證格式

常見的 SSL 憑證的檔案格式大概有以下幾種:

種類格式副檔名
Base64 文字PEM.pem.crt.cer.key
Base64 文字PKCS #7.p7b.p7c
二進位DER.cer.der
二進位PKCS #12.pfx.p12

在這些憑證格式中,PEM 算是比較常見的,若遇到需要換格式的時候,可以使用以下的 OpenSSL 的指令來處理。

PEM 與 DER 格式轉換

以下指令可將 DER 格式的憑證檔案 certificate.der 轉換成 PEM 格式的 certificate.pem

# DER 格式轉 PEM 格式
openssl x509 -inform der -in certificate.der -out certificate.pem

以下指令可將 PEM 格式的憑證檔案 certificate.pem 轉換成 DER 格式的 certificate.der

# PEM 格式轉 DER 格式
openssl x509 -outform der -in certificate.pem -out certificate.der

PEM 與 PKCS #12 格式轉換

以下指令可將 PEM 憑證 certificate.crt 與私鑰 private.key 連同 CA 的憑證 CACert.crt 一起轉為 PKCS #12 格式的 keystore.pfx

# PEM 憑證與私鑰轉 PKCS #12
openssl pkcs12 -export -out keystore.pfx -inkey private.key \
  -in certificate.crt -certfile CACert.crt

以下指令可從 PKCS #12 格式的 keystore.pfx 中轉出 PEM 格式的私鑰與憑證:

# PKCS #12 轉出 PEM 格式的私鑰與憑證
openssl pkcs12 -in keystore.pfx -out keystore.pem -nodes

也可以將 PKCS #12 中的私鑰與憑證個別轉出:

# PKCS #12 轉出 PEM 格式的私鑰
openssl pkcs12 -in keystore.pfx -out private.pem -nodes -nocerts

# PKCS #12 轉出 PEM 格式的憑證
openssl pkcs12 -in keystore.pfx -out certificate.pem -nodes -nokeys

參考資料