解決問題 SSL/TLS (7)

教學目標

主要解決如何透過 Windows Server 2012 R2 網站伺服器的 IIS 管理員產生適用於設定 Apache 網站伺服器的私密金鑰檔和數位憑證檔之問題。

重點概念

首先 Windows Server 2012 R2 網站伺服器的 IIS 管理員角色中主要能夠匯出 PKCS#7 和 PKCS#12 兩種類型的公鑰加密標準 (Public Key Cryptography Standards, PKCS) 格式檔案,所謂 PKCS#7 密碼訊息語法標準 (Cryptographic Message Syntax Standard) 主要規範以公開金鑰基礎設施 (Public Key Infrastructure,PKI) 所產生之簽章密文之格式,應用於數位憑證,其副檔名為 P7B,至於 PKCS#12 個人資訊交換標準 (Personal Information Exchange Syntax Standard) 主要定義了包含私鑰與公鑰憑證的檔案格式,應用於數位憑證,但是包括私鑰資訊,其副檔名為 PFX。

接著在企業中我們主要會透過Windows Server 2012 R2 網站伺服器的 IIS 管理員建立憑證要求,我們必須指定驗證的必要資訊,主要有一般名稱、組織、組織單位、縣市位置、省份 國家 (地區),其中一般名稱必須設定正確的對外的網址名稱,才能夠正確驗證數位憑證是否有效。並且選擇密碼編譯服務提供者內容為「Microsoft RSA SChannel Cryptographic Provider」,位元長度設定「2048」,就能夠產生憑證要求檔,副檔名為 TXT。此時我們將會傳送憑證要求檔給企業內部的憑證管理中心網站產生數位憑證檔,也就是 P7B 格式的檔案,但是僅有數位憑證檔是無法設定 Apache 網站伺服器的 HTTPS 安全連線,所以我們需要先將數位憑證檔匯入至 Windows Server 2012 R2 網站伺服器之後,我們才能夠透過 IIS 管理員角色匯出包括私密金鑰檔案和數位憑證檔,也就是 PFX 格式檔案。

再來如何將 PFX 檔案轉成私密金鑰檔和數位憑證檔,若是在 Windows 伺服器平台,則能夠 Apache Lounge 中的 openssl 工具進行轉換,請注意在執行 openssl 工具之前必須先安裝Microsoft Visual C++ 可轉散發套件,否則會出現「無法啟動程式,因為您的電腦遺失MSVCP140.dll」的錯誤訊息。此外當我們透過以下指令產生私密金鑰檔時除了輸入當時產生 PFX 所設定的密碼之外,還需輸入暗號 (passphrase),但是若我們需要將私密金鑰檔設定 Apache 網站伺服器的 HTTPS 安全連線設定,則必須再透過以下指令將私密金鑰檔中的暗號 (passphrase) 移除。

1
2
3
> openssl pkcs12 -in server.pfx -clcerts -nokeys -out server.crt
> openssl pkcs12 -in server.pfx -nocerts -nodes -out server_encrypted.key
> openssl rsa -in server_encrypted.key -out server.key

最後當我們產生出私密金鑰檔 (server.key) 和數位憑證檔 (server.crt) 設定至 Apache網站伺服器的設定檔 (httpd-ssl.conf) 中,並且將 Apache 網站伺服器的設定檔 (httpd.conf) 中的 「LoadModule ssl_module modules/mod_ssl.so」 和 「Include conf/extra/httpd-ssl.conf」 前面的註解取消,以及也將的註解也取消掉,重新啟動 Apache 網站伺服器,就能夠完成 Apache 網站伺服器的 HTTPS 安全連線。

相關資源