X.509(PEM/CRT/KEY)與 PFX(PKCS#12)是兩大主流證書容器格式,Linux/Unix 常用前者,Windows/IIS/Java KeyStore 常用後者。openssl pkcs12 子命令可實現雙向無損轉換。
# 輸入:server.key(私鑰)、server.crt(葉子憑證+中繼鏈)
# 輸出:server.pfx(加密容器)
openssl pkcs12 -export \
-inkey server.key \
-in server.crt \
-out server.pfx \
-name "my-server" \
-CAfile ca-bundle.crt \
-caname "Root CA"
執行時會提示設定**匯出密碼**(PFX 加密密碼),匯入 IIS/Windows 時需提供。
# 1. 一次性導出所有明文內容到 PEM
openssl pkcs12 -in server.pfx -nodes -out server.pem
# 輸入 PFX 密碼,server.pem 含:私鑰 + 葉子憑證 + 中繼 CA + 根 CA
# 2. 從 PEM 提取私鑰(去除密碼)
openssl rsa -in server.pem -out server.key
# 3. 從 PEM 提取葉子憑證
openssl x509 -in server.pem -out server.crt
# 4. (可選)提取 CA 鏈
# 手動編輯 server.pem,保留 BEGIN/END CERTIFICATE 區塊中的中繼/根 CA,存為 ca-chain.crt
| 參數 | 作用 |
|---|---|
-export | 建立 PFX(輸出模式) |
-inkey | 指定私鑰檔(PEM 格式) |
-in | 輸入檔(憑證或 PFX) |
-out | 輸出檔 |
-nodes | 不加密私鑰(導出時),僅用於測試/自動化,生產請加密 |
-name | PFX 內部別名(Windows 憑證存儲顯示用) |
-CAfile | 匯入時指定 CA 鏈檔 |
-caname | CA 別名 |
-passin pass:xxx | 非互動式指定輸入密碼 |
-passout pass:xxx | 非互動式指定輸出密碼 |
#!/bin/bash
# pfx_to_pem.sh
set -euo pipefail
PFX=$1; OUT=$2; PASS=$3
mkdir -p "$OUT"
openssl pkcs12 -in "$PFX" -nodes -passin "pass:$PASS" -out "$OUT/all.pem"
openssl rsa -in "$OUT/all.pem" -out "$OUT/private.key"
openssl x509 -in "$OUT/all.pem" -out "$OUT/cert.crt"
# 提取 CA 鏈(簡易 grep,實際建議用 awk 分段)
awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/' "$OUT/all.pem" | tail -n +$(($(grep -n 'END CERTIFICATE' "$OUT/all.pem" | head -1 | cut -d: -f1)+1)) > "$OUT/ca-chain.crt"
echo "Done: $OUT/private.key, $OUT/cert.crt, $OUT/ca-chain.crt"
| 格式 | 副檔名 | 編碼 | 典型用途 |
|---|---|---|---|
| X.509 PEM | .pem .crt .cer | Base64 + 標頭尾 | Nginx、Apache、Linux 服務 |
| Private Key PEM | .key .pem | Base64 + 標頭尾 | 同上 |
| PKCS#12 | .pfx .p12 | 二進制 DER + 加密 | Windows IIS、Java KeyStore、Tomcat |
| PKCS#7 | .p7b .p7c | Base64 僅含憑證鏈 | Windows、Java |
掌握上述指令,即可在異構平台間自由流轉 TLS 憑證資產。
GRUB 救援全攻略:從 grub> 提示符到急救模式完美修復開機引導
Linux 環境下備份策略全景:磁帶裝置存取、tar/cpio/dump 工具鏈、完全/增量/差分備份模式、自動化腳本與驗證機制
Linux 學習路徑與方法論:從桌面用戶到內核開發的完整進階指南
Linux 進程查看命令全解析:ps、pstree、top 實戰指南
解決 tar 壓縮報錯「Error exit delayed from previous errors」三大常見原因
Linux LVM 分區重開機變 inactive 解決方案:vgchange 啟用、boot.lvm 開機自啟、lvm.conf 自動發現啟用、UUID 衝突/非預設安裝原因分析