The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

將 IIS 中已安裝的 SSL 憑證移至 Apache 2.2 for Win32 安裝

這幾天為了替客戶安裝一個 VeriSign 憑證到 Windows 平台的 Apache 2.2 上面傷透腦筋,問了好多朋友都沒有人有這樣的經驗,網路上是有一大堆文章,不過所有的文章都是講如何「自己簽發 SSL 憑證」,但我得到的任務卻是要把一個已經申請下來已經安裝至 IIS 的憑證安裝到 Apache 2.2 for Win32 中,而我手邊得到的資訊十分有限,只有拿到一個 CA.cer 檔,還有一個已經安裝在 IIS 中且可匯出的 VeriSign 憑證。

首先,我上網找資訊找幾個小時,找的資料也很多,不過大多不符合我的需求,讓我很沒方向感,最後還是跟客戶要到 網際威信(HiTRUST) 的電話,直接打電話到認證客服部詢問安裝的方式,果然專家一出手、便知有沒有,他們很精確的瞭解我的問題並且指導我解決這個問題。

我打算用「最短路徑」說明如何解決這個問題,以下是我本次安裝、設定的完整紀錄:

步驟 0:確認手邊現有的資訊(只要這些就夠了)

  1. 客戶有提供給我一個 CA.cer 檔案。
  2. IIS 中已經安裝了 VeriSign 憑證,且憑證的私鑰(Private Key)是可以匯出的。
  3. 客戶有提供給我當初要申請憑證前所設定的私鑰密碼。

步驟 1:準備相關資料與檔案

  1. 下載 Apache 2.2 安裝檔並安裝完成
  2. 中繼憑證檔 ( Server Certificate Chain File )
    • 在 Apache 2.2 中預設檔名為 server-ca.crt
    • 這個檔案就是客戶提供給我的 CA.cer 檔,建議可以將他改名為 server-ca.crt,並將此檔移至 C:\Program Files\Apache Software Foundation\Apache2.2\conf 目錄下。
    • 這個檔案的內容也會在核發憑證下來後的通知信裡面出現,只要將信件中 -----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 為止的內容複製起來,並儲存成 server-ca.crt 檔即可。
  3. 伺服器憑證檔 ( Server Certificate File )
    • 在 Apache 2.2 中預設檔名為 server.crt
    • 「伺服器憑證檔」必須先透過 IIS 匯出二進位格式的 PKCS12 私鑰檔 (*.pfx) 轉換成 ASCII 格式的才看的到。
  4. 伺服器私鑰檔 ( Server Private Key File )
    • 在 Apache 2.2 中預設檔名為 server.key
    • 「伺服器私鑰檔 」必須先透過 IIS 匯出二進位格式的 PKCS12 私鑰檔 (*.pfx) 轉換成 ASCII 格式的才看的到。

步驟 2:從 IIS 匯出憑證(包括 伺服器憑證伺服器私鑰

  1. 開啟已經設定好 SSL 的網站並開啟內容,再切換到[目錄安全設定]頁籤,點選 [伺服器憑證] 按鈕
    開啟已經設定好 SSL 的網站,並開啟內容,再切換到「目錄安全設定」頁籤,點選 [伺服器憑證] 按鈕
  2. 選取 [匯出目前的憑證到 .pfx 檔案],並按 [下一步]
    image
  3. 輸入要儲存 .pfx 檔案的路徑與檔名
    輸入要儲存 .pfx 檔案的路徑與檔名
  4. 輸入當初申請憑證時所設定的密碼
    輸入當初申請憑證時所設定的密碼
  5. 最後會顯示匯出憑證摘要,確認後按下 [下一步] 後再按 [完成] 按鈕即可完成匯出。
    最後會顯示匯出憑證摘要,確認後按下 [下一步] 後再按 [完成] 按鈕即可完成匯出。

步驟 3:將 IIS 匯出的 PKCS12 憑證檔 ( C:\mycert.pfx ) 轉換成 Apache 所需的格式

  1. 透過 Apache 2.2 所附的 openssl.exe 工具進行檔案格式的轉換
    1. 先開啟「命令提示字元」視窗,並進入 C:\Program Files\Apache Software Foundation\Apache2.2\bin 目錄
    2. 執行以下指令:
      C:\...\Apache2.2\bin> openssl.exe pkcs12 -in c:\mycert.pfx -out c:\mycert.txt -nodes
      Enter Import Password:
      MAC verified OK
      當你輸入 openssl.exe pkcs12 -in c:\mycert.pfx -out c:\mycert.txt -nodes 指令後,會被要求再次輸入憑證密碼,若驗證正確就會建立一個 c:\mycert.txt 檔案。
    3. 這時用記事本開啟 c:\mycert.txt 檔案,裡面同時包含兩個憑證,分別是 伺服器私鑰(RSA PRIVATE KEY) 與 伺服器憑證(CERTIFICATE)。
    4. 請在 C:\Program Files\Apache Software Foundation\Apache2.2\conf 目錄下先建立兩個空檔案,檔名分別是 server.keyserver.crt
    5. 這時將 c:\mycert.txt 檔案中的兩個憑證內容分別複製到這兩個檔案內,檔案的內容應該只包括 -----BEGIN *----- 到 -----END * ----- 的內容,c:\mycert.txt 中其他的資料都不能出現在這兩個檔案中。
      1. server.key 的內容會像如下的內容
        -----BEGIN RSA PRIVATE KEY-----
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        ................
        ................
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
        -----END RSA PRIVATE KEY-----
      2. server.crt 的內容會像如下的內容
        -----BEGIN CERTIFICATE-----
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        ........
        ........
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
        -----END CERTIFICATE-----

步驟 4:修改 Apache 設定檔

  1. 編輯 C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf 檔案
    1. 取消註解 LoadModule ssl_module modules/mod_ssl.so
    2. 取消註解 Include conf/extra/httpd-ssl.conf
  2. 編輯 C:\Program Files\Apache Software Foundation\Apache2.2\conf\extra\httpd-ssl.conf 檔案
    1. 將此檔中所有 _default_ 都改成 *
    2. 取消註解 SSLCertificateChainFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server-ca.crt"

步驟 5:重新啟動 Apache22 服務

net stop Apache22
net start Apache22

雖然手續繁雜,但我已經簡化到不能再簡單了。因為這次的經驗讓我更加瞭解 Apache SSL 的設定方式,以後應該不會再遇到問題了。