Apache 網站設定 SSL 連線

    版本為 05:56, 26 Nov 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    本篇將以兩種不同使用模式來說明:

    1. 一般網站模式: 這用於一般型網站的 SSL 加密連線,適用於各類公開型網站。
    2. 認證連線模式: 這對於某些非公開型的網站,例如 Elastix 的 UI 存取,用戶端必須安裝指定的憑證檔才能對網站作存取。

    模式一: 公開型網站

    需要的檔案

    • Server 憑證檔 (xxx.crt)
    • Server 金鑰檔 (xxx.key)
       

    編輯 /etc/httpd/conf.d/ssl.conf: (以 CentOS 5.x 為例)

    LoadModule ssl_module modules/mod_ssl.so
    
    Listen 443
    
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl    .crl
    ...
    
    <VirtualHost _default_:443>
    ServerName this.is.your.host:443 <=== 這裡
    
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn
    
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    
    SSLCertificateFile /etc/pki/mypbxCA/certs/this-is-your-host_SERVER.crt            <=== 這裡
    SSLCertificateKeyFile /etc/pki/mypbxCA/private/this-is-your-host_SERVER.key  <=== 這裡
    ...
    </VirtualHost>
    

    重啟 Apache 服務

    用戶端

    開啟 Firefox 輸入 https://this.is.your.host/ ,會看到以下視窗

    SSL_noCA.png

    會出現這訊息是因為 Server 憑證是我們自己所簽署的,可以選擇 新增例外網站 後,就可以繼續這個網站的存取,爾後用戶再次瀏覽時,就不再出現這個訊息。

    假使不想讓用戶看到這訊息,以及新增例外網站,有兩個作法:

    1. 透過第三方的憑證認證機構來簽署 Server 憑證,例如 Verisign,這需要付費。
    2. 將 CARoot 憑證檔(xxx.crt)傳給用戶,並匯入用戶端的 Firefox,匯入方法:
      Firefox > 選項 > 進階 > 加密 > 檢視憑證清單 > 伺服器 > 匯入 (副檔名必須是 .crt 或 .cer)
      Firefox > 選項 > 進階 > 加密 > 檢視憑證清單 > 伺服器 > (選擇剛匯入的憑證檔) > 編輯信任
      勾選 不信任此憑證的鑑別 > 編輯憑證機構信任關係 > 全選
       

    不管用戶端使用以上任何一個方式來存取網站,這樣的連線都是經過加密的 SSL安全連線。

    TIPs:

    第三方憑證簽署除了付費的 Verisign 以外,免費的可以考慮 Let's Encrypt 網站所提供的服務,中文介紹可前往

    SSL For Free 免費 SSL 憑證申請,使用 Let’s Encrypt 最簡單方法教學

    模式二: 非公開型網站 (用戶端必須安裝指定憑證檔)

    需要的檔案

    • Root CA 憑證 (CA_root.crt)
    • Server 憑證檔 (xxx.crt)
    • Server 金鑰檔 (xxx.key)
    • PKCS#12 憑證檔 (xxx.p12) 用戶端匯入用
       

    編輯 /etc/httpd/conf.d/ssl.conf: (以 CentOS 5.x 為例)

    ...
    <VirtualHost _default_:443>
    ServerName this.is.your.host:443 <=== 這裡
    
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn
    
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    
    SSLCertificateFile /etc/pki/mypbxCA/certs/this-is-your-host_SERVER.crt            <=== 這裡
    SSLCertificateKeyFile /etc/pki/mypbxCA/private/this-is-your-host_SERVER.key  <=== 這裡
    
    SSLCACertificateFile /etc/pki/mypbxCA/certs/yourCA_Root.crt <=== 這裡
    SSLVerifyClient require <=== 這裡
    SSLVerifyDepth  10 <=== 這裡
    ...
    </VirtualHost>

    重啟 Apache 服務

    用戶端

    開啟 Firefox 輸入 https://this.is.your.host/,會看到以下視窗

    SSL_noCA.png

     會出現這訊息是因為 Server 憑證是我們自己所簽署的,可以選擇 新增例外網站 後,就可以繼續這個網站的存取,爾後用戶再次瀏覽時,就不再出現這個訊息。

    假使不想讓用戶看到這訊息,以及新增例外網站,有兩個作法:

    1. 透過第三方的憑證認證機構來簽署 Server 憑證,例如 Verisign,這需要付費。
    2. 將 CARoot 憑證檔(xxx.crt)傳給用戶,並匯入用戶端的 Firefox,匯入方法:
      Firefox > 選項 > 進階 > 加密 > 檢視憑證清單 > 伺服器 > 匯入 (副檔名必須是 .crt 或 .cer)
      Firefox > 選項 > 進階 > 加密 > 檢視憑證清單 > 伺服器 > (選擇剛匯入的憑證檔) > 編輯信任
      勾選 不信任此憑證的鑑別 > 編輯憑證機構信任關係 > 全選
       

    不管用戶端使用以上任何一個方式來存取網站,這樣的連線都是經過加密的 SSL安全連線。

    不過,假使 Apache 網站啟用了認證模式(SSLVerifyClient),用戶端除了必須完成上述的步驟外,還需要匯入一個 PKCS#12 憑證檔,否則會遭遇到以下錯誤訊息:

    SSL_no_PKCS#12.png

    用戶端匯入 PKCS#12 憑證檔的步驟:

    1. 準備 PKCS#12 憑證檔 (xxx.p12)
    2. Firefox > 選項 > 進階 > 加密 > 檢視憑證清單 > 個人(你的憑證) > 匯入 (副檔名必須是 .p12) > 輸入正確的密碼
    3. 重新整理網頁

    關於 PKCS#12 憑證檔

    • 這個憑證檔是由 CARoot 或 Client 憑證(xxx.crt)轉換過來的
    • 匯入時所需要的密碼是當初製作這憑證時所設定的 Export 密碼
    • 這憑證只用來作用戶端的連線認證,與SSL加密連線沒有關係
    Powered by MindTouch Core