所有 SSL 文章 SSL 與憑證

SSL 證書格式:PEM、PFX、DER 詳解

SSL 證書和私鑰可以儲存為多種檔案格式。內容是相同的——區別在於編碼和封裝方式。大多數困惑來自於需要為特定伺服器提供特定格式。

格式對比

格式副檔名編碼包含內容使用者
PEM.pem, .crt, .cer, .keyBase64(文字)證書、金鑰或證書鏈(每檔案一個)Nginx、Apache、大多數 Linux 伺服器
DER.der, .cer二進位制單個證書或金鑰Java、某些 Windows 應用
PFX/PKCS#12.pfx, .p12二進位制證書 + 金鑰 + 證書鏈合為一個檔案Windows IIS、Azure、macOS Keychain

PEM —— 最常見的格式

PEM(Privacy Enhanced Mail)是 Base64 編碼的文字。可以用文字編輯器開啟:

-----BEGIN CERTIFICATE-----
MIIFYjCCBEqgAwIBAgISA8ht...
(base64 encoded data)
-----END CERTIFICATE-----

PEM 檔案可以包含證書、私鑰或證書鏈。檔案頭告訴你裡面是什麼:

  • BEGIN CERTIFICATE —— 一張證書
  • BEGIN PRIVATE KEY —— 一個私鑰(或 BEGIN RSA PRIVATE KEY / BEGIN EC PRIVATE KEY
  • BEGIN CERTIFICATE REQUEST —— 一個 CSR

GetHTTPS 輸出 PEM 格式 —— privkey.pemcert.pemchain.pemfullchain.pem

DER —— 二進位制編碼

DER 是 PEM 以文字編碼的相同資料的二進位制形式。不是人類可讀的。主要用於 Java 應用(keytool)和某些 Windows 元件。

PFX/PKCS#12 —— 打包格式

PFX(Personal Information Exchange)將證書、私鑰和證書鏈打包成一個受密碼保護的檔案。Windows IIS、Azure App Service 和 macOS Keychain 需要此格式。

格式之間的轉換

所有轉換使用 OpenSSL:

PEM → PFX

openssl pkcs12 -export \
  -out certificate.pfx \
  -inkey privkey.pem \
  -in cert.pem \
  -certfile chain.pem

系統會提示你設定匯出密碼。

PFX → PEM

# Extract certificate
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out cert.pem

# Extract private key
openssl pkcs12 -in certificate.pfx -nocerts -nodes -out privkey.pem

# Extract chain
openssl pkcs12 -in certificate.pfx -cacerts -nokeys -out chain.pem

PEM → DER

openssl x509 -in cert.pem -outform DER -out cert.der

DER → PEM

openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem

我需要哪種格式?

伺服器/平臺格式所需檔案
NginxPEMfullchain.pem + privkey.pem
ApachePEMcert.pem + chain.pem + privkey.pem
IIS (Windows)PFXcertificate.pfx(從 PEM 轉換)
Azure App ServicePFXcertificate.pfx
AWS (ACM)PEMcert.pem + chain.pem + privkey.pem(貼上到控制檯)
Java (Tomcat)JKS 或 PFXPEM → PFX → JKS 使用 keytool 轉換
Node.jsPEM在程式碼中直接讀取檔案

如何識別檔案的格式

不確定檔案是什麼格式?檢查:

# If it starts with "-----BEGIN" — it's PEM (base64 text)
head -1 mystery-file.pem

# If it's binary (garbled text) — it's DER or PFX
file mystery-file.cer
# Output like "data" or "certificate" = DER
# Output like "PKCS12" = PFX

# Inspect a PEM certificate
openssl x509 -in cert.pem -noout -text

# Inspect a DER certificate
openssl x509 -in cert.der -inform DER -noout -text

# Inspect a PFX file
openssl pkcs12 -in cert.pfx -info -nokeys

常見的副檔名混淆

副檔名通常表示也可能是
.pemPEM(Base64)始終是 PEM
.crtPEM 證書Windows 上可能是 DER
.cerPEM 證書Windows 上可能是 DER
.keyPEM 私鑰DER(罕見)
.pfxPKCS#12 包始終是 PFX
.p12PKCS#12 包始終是 PFX(與 .pfx 相同)
.derDER(二進位制)始終是 DER
.jksJava KeyStore始終是 JKS

經驗法則: 用文字編輯器開啟檔案。如果看到 -----BEGIN CERTIFICATE-----,無論副檔名是什麼,它都是 PEM 格式。如果看到二進位制亂碼,它就是 DER 或 PFX。

常見問題

.crt、.cer 和 .pem 有什麼區別?

它們都可以是 PEM 格式。副檔名是命名約定,不是格式標識。.crt.cer 通常用於證書檔案,.pem 用於任何 PEM 編碼的檔案。在 Windows 上,.cer 檔案有時是 DER 編碼的——用文字編輯器開啟檢查即可。

為什麼 GetHTTPS 給我 4 個檔案?

為了最大相容性。GetHTTPS 提供:privkey.pem(私鑰)、cert.pem(僅你的證書)、chain.pem(中間 CA 證書)、fullchain.pem(證書 + 證書鏈合併)。Nginx 需要 fullchain.pemApache 需要單獨的 cert.pem + chain.pemIIS 需要 PFX(從 PEM 轉換)。

如何為 Windows/IIS 建立 PFX?

使用上面的 OpenSSL PEM → PFX 命令。你需要從 GetHTTPS 獲取的 privkey.pemcert.pemchain.pem。生成的 .pfx 可以匯入到 IIS、Azure App Service 或 macOS Keychain。

沒有私鑰能轉換格式嗎?

你可以在沒有私鑰的情況下將證書在 PEM 和 DER 之間轉換。但建立 PFX 需要私鑰(它將證書和金鑰打包在一起)。如果丟失了私鑰,你需要生成新的證書。

Let’s Encrypt 使用什麼格式?

Let’s Encrypt(透過包括 GetHTTPS 在內的任何 ACME 用戶端)輸出 PEM 格式。如果你的伺服器需要其他格式,使用上面的 OpenSSL 命令進行轉換。

相關文章

部署 2026-05-08
如何在 Nginx 上安裝 SSL 證書
在 Nginx 上安裝 SSL 證書的分步指南。涵蓋檔案上傳、完整 server 塊配置、TLS 最佳實踐、HTTP/2、HSTS、重新導向設定、測試以及 6 個常見錯誤的排查方法。
部署 2026-05-08
如何在 Apache 上安裝 SSL 證書
使用 mod_ssl 在 Apache 上安裝 SSL 證書的分步指南。涵蓋檔案上傳、VirtualHost 配置、TLS 最佳實踐、HSTS、HTTP 重新導向以及 5 個常見錯誤的排查方法。
SSL 與憑證 2026-05-07
什麼是 CSR(證書籤名請求)?
CSR 是傳送給憑證授權機構以申請 SSL 證書的訊息。瞭解 CSR 包含什麼、如何生成,以及為什麼 GetHTTPS 會自動處理它。
在瀏覽器中取得免費 SSL 憑證
無需安裝,無需帳號。私鑰始終留在你的裝置上。
取得憑證