我們公司有經銷代理 TWCA 網站伺服器憑證,每隔一段時間都會有一些死忠的客戶跟我們定期續約購買,但這個過程很多人沒有經驗,經常搞不清楚該如何申請。如果你是開發人員,透過 mkcert 建立自簽憑證完全沒有難度,但是若要申請一個正式憑證就不是很多人能清楚步驟了。這篇文章我打算來解說一個完整的憑證申請流程,讓每個人都可以輕鬆掌握。
安裝 OpenSSL 工具
OpenSSL 是一個跨平台工具,在 Linux 是內建的,而在 Windows 上安裝也十分簡單。
-
透過 Chocolatey 安裝 OpenSSL.Light 套件
choco upgrade OpenSSL.Light -y
-
直接使用 Git for Windows 內建的 OpenSSL 工具
預設你只要安裝 Git for Windows 就會內含 openssl
工具程式,預設執行檔路徑如下:
C:\Program Files\Git\usr\bin\openssl.exe
請記得設定 PATH
環境變數,加入 C:\Program Files\Git\usr\bin
這個路徑即可!
以下可以檢查 openssl
命令列工具版本:
PS> openssl version
OpenSSL 3.0.3 3 May 2022 (Library: OpenSSL 3.0.3 3 May 2022)
準備申請 SSL/TLS 憑證
-
先想清楚你想要申請的 SSL/TLS 憑證上要顯示哪些資訊
一般來說,申請一張 SSL/TLS 憑證需要提供以下 6 個欄位,這些資訊會寫入憑證的 Subject
屬性中,所以非常重要。
以下是填寫時的範例:
-
建立一個文字格式的 OpenSSL 設定檔:ssl.conf
[req]
prompt = no
default_md = sha256
default_bits = 2048
distinguished_name = dn
x509_extensions = v3_req
[dn]
C = TW
ST = Taiwan
L = Taipei
O = DUOTIFY INC.
OU = IT
CN = www.miniasp.com.tw
[v3_req]
這個檔案你只需要調整 [dn]
的部分,替換成你申請時事先準備好的 6 個欄位資料!
-
建立 CSR (Certificate Signing Request) 憑證要求檔 (PKCS#10
)
建立私密金鑰並同時建立 CSR (Certificate Signing Request) 憑證要求檔:
openssl req -new -nodes -sha256 -utf8 -newkey rsa:2048 -keyout server.key -out server.csr -config ssl.conf
這個命令會產生 1 個私密金鑰 server.key
與 1 個 CSR 憑證要求檔 server.csr
,兩個檔案都非常重要!
你可以透過以下指令查看 CSR (Certificate Signing Request) 憑證要求檔內容
openssl req -in server.csr -noout -text
線上版: CSR Decoder
-
請將 server.csr
寄給我們 (申購憑證的廠商),就可以開始進行申購 SSL/TLS 憑證的程序了!
從我們經銷商的角度來看,也只是將這個 server.csr
憑證要求檔寄給 TWCA 而已,等他們檢核內容無誤後,核發正式憑證給我們。
取得伺服器憑證並產製 PFX (PKCS#12) 憑證檔
申購到憑證之後,你會收到類似以下的郵件:
郵件的附件會有一個 cert.zip
壓縮檔,裡面包含了完整的憑證鏈,其內容如下:
這三個檔案分別用途如下:
-
根憑證 (Root Certificate)
root.cer
通常不需要特別使用,因為信任的根憑證老早就在每個人的電腦或瀏覽器中了!
-
中繼憑證 (Intermediate Certificate)
uca.cer
有些伺服器需要將中繼憑證一並安裝到網站伺服器中才能運作,因此你日後可能會用上。
-
伺服器憑證 (Server Certificate)
server.cer
這個檔案是最主要的憑證檔!
由於 PKI 基礎建設,需要一個公開憑證 (server.cer
) 與一個私密金鑰 (server.key
) 才能運作,因此你必須同時擁有這兩個檔案,才能完成整個 TLS 加解密的過程。
在 Linux 作業系統下,大部分的 Web Server 網站伺服器,都需要讓你指定這兩個檔案的路徑,外加一個金鑰密碼才能運作,如果你希望網站伺服器在啟動的時候不要人工輸入密碼,那麼你就不應該對你的私密金鑰加密。但是你就要做好私密金鑰的保存與管理。
在 Windows 作業系統下,主要是使用 IIS 為主,但是 IIS 並不使用 PEM 格式的憑證檔與私密金鑰檔,因此你需要將這兩個檔案合併成一個 PKCS#12 格式的 PFX 檔案(*.pfx
)。不過,格式轉換之前,建議要將 cert.zip
壓縮檔中的三個憑證,全部都先合併成一個憑證檔!其步驟如下:
-
先合併憑證檔
PowerShell
Get-Content server.cer, uca.cer, root.cer | Out-File -Encoding ascii -FilePath server-combined.cer
Bash
cat server.cer uca.cer root.cer > server-combined.cer
-
轉換檔案格式的命令如下:
使用預設轉換
openssl pkcs12 -export -in server-combined.cer -inkey server.key -out server.pfx
Enter Export Password:
使用 TripleDES 加密演算法 (若要上傳憑證到 Azure Web App 需要用這段命令產生 PFX 檔案) (OpenSSL 3+)
openssl pkcs12 -export -in server-combined.cer -inkey server.key -out server.pfx -legacy -provider-path "C:\Program Files\OpenSSL\bin"
Enter Export Password:
注意: 由於 PKCS#12 規格上提到產製 *.pfx
檔案時,強制規定必須設定一組密碼,所以在匯出的時候一定要設定密碼。
如此以來,這整個過程你已經擁有了 4 個檔案,分別是:
server.key
(私密金鑰) (使用 PEM
格式) (無密碼保護)
server.cer
(憑證檔案) (使用 PEM
格式) (或 server-combined.cer
合併憑證後的檔案)
server.pfx
(PFX 檔案) (使用 PKCS#12
格式)
server.csr
(憑證要求檔) (使用 PKCS#10
格式) (這個檔案已經不需要了)
以上就是申請正式 SSL/TLS 憑證的完整過程,非常簡單! 👍
TL;DR
最後來個懶人包,就算你不是工程師,開啟 Windows PowerShell 複製貼上總會吧?(請記得 [dn]
內的資訊要改過)
-
快速建立私密金鑰(server.key
)與憑證要求檔(server.csr
)
@"
[req]
prompt = no
default_md = sha256
default_bits = 2048
distinguished_name = dn
x509_extensions = v3_req
[dn]
C = TW
ST = Taiwan
L = Taipei
O = DUOTIFY INC.
OU = IT
CN = www.miniasp.com.tw
[v3_req]
"@ | Out-File -Encoding ascii -FilePath 'ssl.conf'
openssl req -new -nodes -sha256 -utf8 -newkey rsa:2048 -keyout server.key -out server.csr -config ssl.conf
-
寄出 server.csr
申請憑證
-
收到 cert.zip
憑證清單壓縮檔
基本上,目前目錄中應該有兩個重要檔案,一個是 server.key
金鑰檔,另一個是 cert.zip
憑證清單壓縮檔。
先用 PowerShell 解壓縮 cert.zip
壓縮檔:
Expand-Archive -Path cert.zip -DestinationPath .
合成一個 server-combined.cer
憑證檔
Get-Content server.cer, uca.cer, root.cer | Out-File -Encoding ascii -FilePath server-combined.cer
-
產生 PFX 憑證檔 (server.pfx
)
openssl pkcs12 -export -in server-combined.cer -inkey server.key -out server.pfx -legacy -provider-path "C:\Program Files\OpenSSL\bin"
請務必妥善保存 PFX 憑證密碼,匯入憑證時需要輸入。
相關連結