製作憑證請求檔(CSR)

建立用於申請 SSL 憑證的請求檔案

目錄

注意事項

請確認主機 OpenSSL 的版本是否有受到 Heartbleed Bug 的影響,
可輸入以下指令來確認您 OpenSSL的版本。

1
openssl version

影響範圍:1.0.1 ~ 1.0.1f / 1.0.2-beta ~ 1.0.2-beta1
若有 Heartbleed Bug,建議先升級到修復版本

產生金鑰

密碼長度不建議低於 2048,目前 512 已有被破解的紀錄  

⚠️ 注意,請於空的資料夾執行,避免原本的 Key 被覆蓋 (有的話)

1
openssl genrsa -aes256 -out server.key 2048

執行過程會要求您輸入密碼 (Enter PEM pass phrase),
及二次驗證密碼 (Verifying - Enter PEM pass phrase)

⚠️ 注意:請牢記此密碼!
⚠️ 注意:server.key 請妥善保存,不需要給任何人 (包含憑證商)

產生請求檔

1
openssl req -new -key server.key -out certreq.csr

輸入以下資料

Country Name:TW (二字元國碼)
State or Province Name:  (台灣不需輸入,可按 enter 鍵略過)
Locality Name:New Taipei (城市)
Organization Name:公司或組織名稱
Organizational Unit Name: 部門名稱 (例如: IT)
Common Name:要申請憑證的網域 (不帶 https:// )
Email Address:電子信箱,可輸入也可略過
A challenge password:  (按 enter 鍵略過)
An optional company name:  (按 enter 鍵略過)

接著輸入密碼後,目錄內會有一個 certreq.csr,這就是請求檔了!

移除金鑰密碼

1
openssl rsa -in server.key -out server_without_pw.key

得到的 server_without_pw.key,已無密碼保護,請謹慎使用及保存

PFX, PEM, CER, DER 的用途與分辨方式

在處理 SSL/TLS 憑證時,您會遇到許多不同的檔案格式與副檔名,
其中最常見的是 PFX, PEM, CER, 和 DER。
理解它們之間的差異對於正確管理憑證至關重要。

基本上,憑證的內容可以透過兩種主要方式編碼:

  1. PEM (Privacy-Enhanced Mail): ASCII 文字格式
    使用 Base64 編碼,可以用文字編輯器打開。檔案內容會包含 -----BEGIN...----------END...----- 這樣的標頭和結尾。這是最常見的格式,廣泛用於各種伺服器,如 Apache 和 Nginx。
  2. DER (Distinguished Encoding Rules): 二進位格式
    無法用文字編輯器直接讀取。這種格式經常在 Java 平台和 Windows 系統中使用。

而不同的副檔名則代表了不同用途的檔案:

  • .crt / .cer (Certificate): 這兩個副檔名通常代表一個憑證檔案,但它可能是 PEMDER 編碼。在 Windows 中,.cer 通常是 DER 編碼;在 Linux/Unix 系統中,.crt 通常是 PEM 編碼。這些檔案只包含公鑰憑證,不含私鑰。

  • .key (Key): 通常指私鑰檔案,一般是 PEM 編碼。其內容會包含 -----BEGIN PRIVATE KEY----- 標頭。

  • .pfx / .p12 (Personal Information Exchange): 這是一個二進位的封存檔案格式 (也稱為 PKCS#12),用於將伺服器憑證、所有中繼憑證以及私鑰捆綁在一個可加密的檔案中。因為它包含了私鑰,所以通常會用密碼保護。這在 Windows IIS 環境中特別常用,方便憑證的匯入和匯出。

總結

格式/副檔名編碼內容主要用途
PEMBase64 ASCII憑證、私鑰、中繼憑證Linux 平台
DER二進位憑證 (公鑰)Java, Windows 平台
.cer / .crtPEM 或 DER僅憑證 (公鑰)單一憑證
.keyPEM僅私鑰儲存私鑰
.pfx / .p12二進位憑證、私鑰、中繼憑證 (捆綁包)Windows IIS 平台

PEM 和 DER 和 PFX 之間轉換

上述產生的 key 即為 PEM 格式

PEM to PFX

常用於將 Linux 上的憑證轉給 IIS 使用,需同時輸入憑證及對應的 key

1
2
3
4
openssl pkcs12 -in=server.pem -inkey=server_without_pw.pem -export -out=server.pfx

#或者要將額外的憑證加入PFX(例如中繼憑證)
openssl pkcs12 -in=server.pem -inkey=server_without_pw.pem -export -out=server.pfx -certfile CACert.crt

若 PFX 檔匯入 IIS 時出現 "指定的網路密碼錯誤",請將 openssl 版本降至 1.x.x或改用以下指令

1
2
3
4
openssl pkcs12 -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -nomac -in=server.pem -inkey=server_without_pw.pem -export -out=server.pfx

#或者要將額外的憑證加入PFX(例如中繼憑證)
openssl pkcs12 -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -nomac -in=server.pem -inkey=server_without_pw.pem -export -out=server.pfx -certfile CACert.crt

PFX to PEM

常用於將 IIS 上的憑證轉給 Linux 使用,需輸入 IIS 匯出憑證時設定的密碼(有的話)

1
2
3
4
5
#取得金鑰
openssl pkcs12 -in=server.pfx -out=key.pem -nodes

#取得憑證
openssl pkcs12 -in server.pfx -clcerts -nokeys -out server.crt

PEM to DER

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

DER to PEM

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

PVK to PEM

PVK (Microsoft PrivateKey Blob)

1
openssl rsa -in "server.pvk" -inform PVK -out server.key -outform PEM

製作 HAProxy 使用的憑證

請先準備以下檔案

  1. 網域證書 server.crt
  2. 網域證書的金鑰 server.key
  3. 中繼憑證(依序至根憑證) CACert.crt
  4. 根憑證 (如果有的話,通常沒有) root.crt
1
2
#指令格式 cat 網域證書 中繼憑證(依序至根憑證) 網域證書的金鑰 > haproxy-certs.pem
cat server.crt CACert.crt server.key > haproxy-certs.pem

參考資料

如需轉載引用需保留原始連結及作者姓名,並以相同方式分享。CC BY-SA 4.0  
最後更新 2025/07/31 12:30 +0800
瀏覽次數
本站總訪問量
使用 Hugo 建立
主題 StackJimmy 設計