本文系統介紹常見認證檔案格式與 SSL 憑證檔案相關概念,提供格式識別方法、主流 Web 服務器的認證格式選型,以及可直接複用的格式轉換命令。
常見認證檔案格式
不同伺服器對認證格式的要求各不相同,具體可參見主流Web伺服器憑證格式選型。推薦在阿里雲數位憑證管理服務購買並簽發認證後,根據伺服器類型下載對應格式的認證檔案,詳情可參見下載SSL認證。
文檔副檔名 | 內容格式 | 描述 |
| 文字格式設定 (PEM) | 通用副檔名,可存放認證、私密金鑰、憑證鏈結或它們的組合。具體內容需查看檔案中的BEGIN/END標記。 |
| 文字格式設定 (PEM) 或二進位格式 (DER) | 通常用於存放私密金鑰檔案。 |
| 文字格式設定 (PEM) 或二進位格式 (DER) | 通常只包含認證(公開金鑰和身份資訊)、不包含私密金鑰。可以是單個伺服器憑證,也可以是包含中間認證的憑證鏈結檔案。 |
| 二進位格式 (PKCS#12) | 可以同時包含伺服器憑證、私密金鑰和憑證鏈結,通常帶有密碼保護。 |
| 二進位格式 (JKS) | Java 平台專有的密鑰庫(Keystore)格式,用於儲存體金鑰條目(私密金鑰和憑證鏈結)和信任條目(CA 憑證)。自 Java 9 起,PKCS#12 已成為預設的推薦格式。 |
主流Web伺服器憑證格式選型
伺服器類型 | 推薦格式 | 所需檔案 | 說明 |
Nginx, Apache | PEM | 認證檔案 ( | 需要分別配置認證和私密金鑰檔案。認證檔案應為包含伺服器憑證和所有中間認證的完整憑證鏈結。 |
Tomcat, JBoss, WebLogic | PFX/P12 (PKCS#12) | 認證庫檔案 ( | Java應用伺服器推薦使用標準的PKCS#12格式。若仍在使用舊的JKS格式,建議遷移。 |
IIS | PFX | 認證庫檔案 ( | Windows IIS伺服器的標準格式。通過匯入一個帶密碼的 PFX 檔案即可完成認證與私密金鑰的部署。 |
IBM WebSphere | KDB | 認證庫檔案 ( | 使用 IBM 官方提供的 |
對於 Nginx/Apache,如果 CA 提供了獨立的中間認證檔案,需要將伺服器憑證和中間認證合并,然後再部署產生的完整憑證鏈結檔案。通常無需將根CA認證包含在部署的鏈檔案中,僅拼接伺服器憑證與中間認證即可。
# 在 Linux/macOS 的終端中執行
cat server.crt chain.crt > fullchain.crtSSL 憑證檔案相關概念
SSL 憑證檔案涉及以下四個核心概念:
認證組件:構成 SSL 安全通訊的核心要素。
SSL 憑證:包含網域名稱、公開金鑰、頒發者和有效期間等資訊的身份證明。
私密金鑰:與認證中的公開金鑰形成金鑰組,用於身份認證和加密通訊。私密金鑰必須嚴格保密。
憑證鏈結:從伺服器憑證到根CA認證的完整信任路徑,包含一個或多個中間CA認證。
編碼方式:將內容對象序列化為資料流的方式。
PEM (Privacy-Enhanced Mail):文字格式設定。採用 Base 64 編碼,並由
-----BEGIN...-----和-----END...-----標記包裹。一個 PEM 檔案可包含認證、私密金鑰或二者的組合。DER (Distinguished Encoding Rules):二進位格式。ASN.1 的二進位編碼錶示。PEM 通常是對 DER 資料進行 Base 64 編碼並添加 BEGIN/END 標記後的文本封裝。DER 檔案體積比 PEM 更小,但不便於直接用文字編輯器閱讀。
容器格式:用於打包一個或多個認證組件的標準。
PFX / P12 (PKCS#12):二進位格式的認證庫。它將伺服器憑證、私密金鑰以及中間憑證鏈結打包在一個經過密碼保護的加密檔案中。這是在伺服器(尤其是 Windows IIS)之間遷移認證或為Java應用伺服器提供認證時的首選格式,因為它簡化了部署流程。
JKS (Java Keystore):Java 專用的認證庫格式。雖然仍被一些舊版 Java 應用使用,但業界已推薦使用更通用的 PKCS#12 格式。
副檔名:檔案的尾碼名,如
.pem,.crt,.key,.pfx。說明副檔名僅為一種命名規範,並不可靠。例如,
.crt檔案可能是 PEM 編碼,也可能是 DER 編碼。必須通過內容來判斷其實際格式。
如何識別認證檔案格式
部署前,請通過以下方法準確識別認證檔案格式,以避免部署失敗。
通過常值內容識別 (PEM 格式)
使用文字編輯器開啟檔案。如果看到以下格式的 ASCII 字元塊,則為 PEM 編碼格式。否則請使用 OpenSSL 工具識別。
-----BEGIN CERTIFICATE-----
MIIE5zCCA8+gAwIBAgIQN+whYc2BgzAogau0dc3PtzANBgkqh......
-----END CERTIFICATE-----常見的標記包括:
-----BEGIN CERTIFICATE-----:表示這是一個認證檔案。-----BEGIN PRIVATE KEY-----或-----BEGIN RSA PRIVATE KEY-----:表示這是一個私密金鑰檔案。-----BEGIN ENCRYPTED PRIVATE KEY-----:表示這是一個加密的私密金鑰檔案。-----BEGIN EC PRIVATE KEY-----:表示這是一個橢圓曲線(EC, Elliptic Curve)私密金鑰檔案。
使用 OpenSSL 工具識別
對於無法通過文本查看的二進位檔案,或需要擷取詳細資料時,可使用 OpenSSL 命令列工具識別。
識別 PEM 格式的認證檔案。
檔案內容以-----BEGIN CERTIFICATE-----開頭,即為 PEM 編碼的認證。# 查看 PEM 認證的詳細資料 openssl x509 -in certificate.crt -noout -text識別 PEM 格式的私密金鑰檔案。
檔案內容以-----BEGIN PRIVATE KEY-----、-----BEGIN RSA PRIVATE KEY-----、-----BEGIN ENCRYPTED PRIVATE KEY-----、-----BEGIN EC PRIVATE KEY-----開頭,即為 PEM 編碼的私密金鑰。# 查看 PEM 私密金鑰的詳細資料 openssl pkey -in private.key -noout -text識別 PFX/P12 認證庫。
該格式為二進位格式,包含認證和私密金鑰。# 查看 PFX 檔案的內容,會提示輸入密碼 openssl pkcs12 -in keystore.pfx -info -noout識別 DER 格式的認證。
DER 是認證的二進位編碼格式,檔案無法直接用文字編輯器查看。常見於 Java 應用、移動平台以及 Windows 憑證存放區。
# 查看 DER 認證的詳細資料 openssl x509 -in certificate.der -inform der -noout -text
認證格式轉換
可以通過以下兩種方式進行認證格式轉換:
使用數位憑證管理服務提供的轉換工具:其提供了便捷的認證工具,支援 PEM、PFX、JKS 等格式的快速轉換,無需命令列操作。
使用 OpenSSL 命令列工具:OpenSSL 是最通用的認證處理工具,適用於任何作業系統,並能提供高度定製化的轉換選項。
使用數位憑證管理服務提供的轉換工具
阿里雲數位憑證管理服務提供SSL認證格式轉換工具,支援PEM與PFX、PEM與JKS、PEM與PKCS8格式間的轉換。具體操作,請參見認證工具。
使用 OpenSSL 命令列工具
將 PEM 轉換為 PFX (用於 IIS, Tomcat)
此命令將一個認證檔案 (
.crt)、一個私密金鑰檔案 (.key) 以及一個可選的憑證鏈結檔案合并為一個受密碼保護的 PFX 檔案。# 僅包含伺服器憑證和私密金鑰時執行 openssl pkcs12 -export -out server.pfx -inkey private.key -in server.crt # 包含完整憑證鏈結時執行 openssl pkcs12 -export -out server.pfx -inkey private.key -in server.crt -certfile chain.crt將 PFX 拆分為 PEM (用於 Nginx, Apache)
此命令從一個 PFX 檔案中提取出認證(包含憑證鏈結)和私密金鑰,產生多個獨立的 PEM 檔案。
# 1. 提取帶密碼保護的私密金鑰 openssl pkcs12 -in server.pfx -nocerts -out server.encrypted.key # 2. 提取伺服器葉子認證(不含CA鏈) openssl pkcs12 -in server.pfx -clcerts -nokeys -out server.crt # 3. 提取中間CA認證(註:通常不需要包含根CA認證) openssl pkcs12 -in server.pfx -cacerts -nokeys -out chain.crt # 4.(可選)去除私密金鑰密碼保護,便於Nginx/Apache非互動啟動 openssl pkey -in server.encrypted.key -out private.key # 5.(可選)拼接完整憑證鏈結檔案,供Nginx/Apache使用 # 順序:先伺服器憑證,再中間認證(若有多個中間認證則按鏈順序依次拼接) # 注意:如果chain.crt不存在(PFX中沒有中間認證),則跳過此步驟 cat server.crt chain.crt > fullchain.crt說明最終產生的
private.key是一個無密碼保護的私密金鑰檔案,可以直接用於伺服器配置。請確保其檔案許可權得到嚴格的控制(例如chmod 400 private.key,僅檔案所有者可讀)。當存在憑證鏈結且拼接完整憑證鏈結檔案後,部署時參考如下設定:
Nginx :設定
ssl_certificate為fullchain.crt檔案地址,ssl_certificate_key為private.key檔案地址。Apache:設定
SSLCertificateFile為fullchain.crt檔案地址(適用於Apache 2.4.8及以上版本),SSLCertificateKeyFile為private.key檔案地址。對於2.4.8之前的舊版本Apache,需要將中間憑證鏈結單獨配置在SSLCertificateChainFile指令中。
在 DER 和 PEM 之間轉換
DER 是 ASN.1 的二進位編碼,PEM 是對 DER 的 Base64 封裝並附帶 BEGIN/END 標記。兩者內容等價,僅編碼形式不同。
# DER 轉 PEM openssl x509 -inform der -in certificate.cer -out certificate.pem # PEM 轉 DER openssl x509 -inform pem -in certificate.pem -outform der -out certificate.der將 JKS 轉換為 PFX/P12 (推薦的遷移路徑) 如果仍在使用舊的 JKS 認證庫,建議使用 Java 的
keytool工具將其轉換為更通用的 PFX/P12 格式。keytool -importkeystore -srckeystore keystore.jks -srcstoretype JKS -destkeystore keystore.p12 -deststoretype PKCS12說明此命令會將
keystore.jks中的所有條目遷移到新的keystore.p12檔案中。如果您只想遷移特定的條目,可以附加-srcalias "your_alias"和-destalias "your_alias"參數。執行過程中,會提示您輸入目標密鑰庫(PFX/P12)的密碼和源密鑰庫(JKS)的密碼。