Sun Java System Calendar Server 6.3 管理指南

第 7 章 配置 SSL

安全套接層 (Secure Socket Layer, SSL) 是一種協定,用於加密及解密在用戶端和具有 SSL 功能的伺服器之間的安全連線上傳輸的資料。伺服器負責向用戶端傳送數位憑證及用於加密的公開金鑰。如果用戶端信任伺服器的憑證,便可建立 SSL 連線。從一端傳到另一端的所有資料都將加密。只有用戶端及伺服器才能夠解密資料。

Sun Java System 伺服器支援透過檢查使用者的數位憑證來認證使用者。當用戶端與伺服器建立 SSL 階段作業時,不是呈現密碼,而是呈現使用者的憑證。如果已驗證憑證,則也已認證使用者。Calendar Server 支援 SSL 協定,以加密行事曆用戶端一般使用者與 Calendar Server 之間的資料。為支援 SSL,Calendar Server 使用 Netscape 安全服務 (Netscape Security Services, NSS) certutil 工具的 SSL 程式庫,Sun Java System Messaging Server 也使用這些程式庫。NSS certutil 工具隨附於 Calendar Server 產品的 sbin 目錄中。

您可以在 ics.conf 檔案中將 Calendar Server 配置為僅加密 Calendar Server 登入與密碼或加密整個行事曆階段作業。

本章涵蓋配置 SSL 必需的三項工作和疑難排解:


備註 –

Calendar Server 不支援基於用戶端的 SSL 認證。


7.1 為 Calendar Server 配置 SSL

本小節包含為 Calendar Server 配置 SSL 的說明。

本小節包含以下主題:

Procedure建立憑證資料庫

閘道需要憑證,才能將它的公開金錀傳送至用戶端。憑證包含閘道的公開金鑰、與閘道憑證關聯的辨別名稱、憑證的序號或發出日期,以及憑證的過期日期。憑證是由憑證授權單位 (Certification Authority, CA) 發出,這個憑證授權單位會驗證閘道的身份。CA 是發出及管理 X.509 公開金鑰憑證及 CARL 或憑證撤銷清單 (Certification Revocation List, CRL) 的授權單位,受到一或多個使用者信任。CA 是公開金鑰基礎架構 (Public Key Infrastructure, PKI) 的基本建立區塊。另一方面,PKI 是一組用於管理憑證及公開-私密金錀對的策略、程序、伺服器平台、軟體及工作站,包括發出、維護及撤銷公開金鑰憑證的能力。

CA 會將它的名稱插入到每個它所產生的憑證及 CRL,並利用它的私密金鑰以數位方式簽名憑證。一旦您 (直接或透過憑證路徑) 確立了對 CA 的信任,便可以信任該 CA 發出的憑證。透過比較名稱,您可以輕易地識別該 CA 發出的憑證。 無論如何,它的公開金鑰都可以用來確保憑證有效。

CA 會執行四個基本 PKI 功能:

伺服器的憑證及金錀對代表伺服器身份。它們儲存在憑證資料庫中,這個憑證資料庫可以位於伺服器內部,或位於外部的可移除的硬體卡 (智慧卡)。用於 Calendar Server 的 SSL 實作需要憑證資料庫。憑證資料庫必須定義認證機構 (CA) 和用於 Calendar Server 的憑證。本小節包含概念資訊和工作資訊:

開始之前

建立憑證資料庫之前,請先熟悉以下內容:

  1. 以超級使用者的身份登入或成為超級使用者 (root)。

  2. /etc/opt/SUNWics5/config/sslpassword.conf 指定憑證資料庫密碼。

    例如:


    # echo "password file entry" 
          /etc/opt/SUNWics5/config/sslpassword.conf

    密碼檔項目的格式如下:

    內部 (軟體) 記號:密碼

  3. 建立憑證資料庫目錄。例如:


    # cd /var/opt/SUNWics5
     # mkdir alias
  4. 移至 bin 目錄,並產生憑證資料庫 (cert8.db) 和金鑰資料庫 (key3.db)。例如:


    # cd /opt/SUNWics5/cal/bin
     # ./certutil -N -d /etc/opt/SUNWics5/config
                     -f /etc/opt/SUNWics5/config/sslpassword.conf

    備註 –

    當您必須執行 certutil 公用程式時,請完全依照範例,或者查閱 certutil 說明頁面以瞭解語法。

    例如,在這種情況下,沒有指定 -d /file 資訊,請勿執行帶有 -N 選項的此公用程式。


  5. 產生預設的自我簽署的根認證機構憑證。例如:


    # ./certutil -S -n SampleRootCA -x -t "CTu,CTu,CTu"
     -s "CN=My Sample Root CA, O=sesta.com" -m 25000
     -o /etc/opt/SUNWics5/config/SampleRootCA.crt
     -d /etc/opt/SUNWics5/config
     -f /etc/opt/SUNWics5/config/sslpassword.conf -z
     /etc/passwd
  6. 產生用於主機的憑證。例如:


    # ./certutil -S -n SampleSSLServerCert -c SampleRootCA 
     -t "u,u,u"
     -s "CN=hostname.sesta.com, O=sesta.com" -m 25001
     -o /etc/opt/SUNWics5/config/SampleSSLServer.crt
     -d /etc/opt/SUNWics5/config 
     -f /etc/opt/SUNWics5/config/sslpassword.conf
     -z /etc/passwd

    其中 hostname.sesta.com 為伺服器主機名稱。

  7. 驗證憑證。例如:


    # ./certutil -V -u V -n SampleRootCA  
        -d /etc/opt/SUNWics5/config
     # ./certutil -V -u V -n SampleSSLServerCert 
       -d /etc/opt/SUNWics5/config
  8. 列出憑證。例如:


    # ./certutil -L -d /etc/opt/SUNWics5/config
     # ./certutil -L -n SampleSSLServerCert 
       -d /etc/opt/SUNWics5/config
  9. 使用 modutil 列出可用的安全模組 (secmod.db)。例如:


    # ./modutil -list -dbdir /etc/opt/SUNWics5/config
  10. 將別名檔案的所有者變更為 icsusericsgroup (或 Calendar Server 執行時將使用的使用者與群組身份)。例如:


    # find /etc/opt/SUNWics5/config -exec chown icsuser {};
     # find /etc/opt/SUNWics5/config -exec chgrp icsgroup {};

7.1.1 自我簽署的憑證

自我簽署的憑證以閘道自己的私密金鑰簽署。自我簽署的憑證不安全,但是在已簽署的憑證可供使用之前,它們可以用來測試需要憑證的應用程式。自我簽署的憑證使用自己的憑證請求做為簽名,而不是 CA 的簽名。

透過 PKI 建立自我簽署的憑證時,有十個常用的欄位,其中六個是必要的,四個是選擇性的。序號、憑證簽名演算法識別碼、憑證發行者名稱、憑證有效期、公開金鑰及主旨名稱都是必要欄位。選擇性欄位是版本編號、兩個唯一識別碼及副檔名。這些選擇性欄位只會出現在版本 2 及版本 3 的憑證中。

必要的「有效」欄位指出憑證生效的日期,以及憑證過期的日期。NSS 憑證公用程式提供的過期日期的預設值是三個月。不過,在過期日期到達之前,憑證中的有效性資料會變成無法信賴。X.509 CRL 機制會為它們發出的憑證提供狀態更新,並管理憑證過期日期。此外,CA 也會將憑證過期強制設定為一或兩年。

當憑證過期或超過有效日期時,需要更新它。更新是一種透過發出新的憑證,延伸公開金鑰憑證宣告的資料連結的有效日期之動作或程序。可以使用以下指令來驗證憑證:

-V -n certname -b validity-time -u certusage [-e] [-l] [-d certdir]

以下範例顯示如何使用指令來驗證憑證:

certutil -V -n jsmith@netscape.com -b 9803201212Z -u SR -e -l -d certdir.

憑證資料庫工具顯示類似如下的結果:

Certificate:'jsmith@netscape.com' is valid.

UID=jsmith, E=jsmith@netscape.com, CN=John Smith, O=Netscape Communications Corp., C=US : Expired certificate

UID=jsmith, E=jsmith@netscape.com, CN=John Smith, O=Netscape Communications Corp., C=US : Certificate not approved for this operation

Procedure請求與匯入來自根認證機構的憑證

以下步驟告訴您如何產生憑證請求,並將其提交至公開金鑰基礎架構 (PKI) 網站,然後匯入該憑證。這些指令假設您將憑證資料庫保存在 config 目錄中。

開始之前

憑證資料庫與密碼檔案必須同時位於相同的目錄中。這裡顯示的預設值是 config 目錄,但是您可以選擇另一個目錄,在此情況下,您必須配置不同的 path 參數,如以下程序中所示。

  1. 以超級使用者的身份登入或成為超級使用者 (root)。

  2. 移至 bin 目錄:

    # cd /opt/SUNWics5/cal/bin

  3. 使用 certutil 根據認證機構或公開金鑰基礎架構 (PKI) 網站來產生憑證請求。例如:


    # ./certutil -R -s "CN=hostname.sesta.com, 
    OU=hostname/ SSL Web Server, O=Sesta, 
    C=US" -p "408-555-1234" -o hostnameCert.req 
    -g 1024  -d /etc/opt/SUNWics5/config 
    -f /etc/opt/SUNWics5/config/sslpassword.conf  -z /etc/passwd -a

    其中 “hostname.sesta.com” 是主機名稱。

  4. 向認證機構或公開金鑰基礎架構 (PKI) 網站為 SSL Web 伺服器請求一個測試憑證。複製 hostnameCert.req 檔案的內容,並將其貼至憑證請求中。

    當您的憑證被簽署並可取得時您會收到通知。

  5. 將認證機構憑證鏈與 SSL 伺服器憑證複製至文字檔案中。

  6. 將認證機構憑證鏈匯入憑證資料庫以建立授權鏈。例如:


    # ./certutil -A -n "GTE CyberTrust Root"
        -t "TCu,TCu,TCuw" 
        -d /etc/opt/SUNWics5/config 
        -a 
        -i /export/wspace/Certificates/CA_Certificate_1.txt
        -f /etc/opt/SUNWics5/config/sslpassword.conf
    # ./certutil -A -n "Sesta TEST Root CA" 
        -t "TCu,TCu,TCuw" 
        -d /etc/opt/SUNWics5/config 
        -a 
        -i /export/wspace/Certificates/CA_Certificate_2.txt
        -f /etc/opt/SUNWics5/config/sslpassword.conf
  7. 匯入已簽署的伺服器憑證:


    # ./certutil -A -n "hostname SSL Server Test Cert"
        -t "u,u,u" -d /etc/opt/SUNWics5/config 
        -a 
        -i /export/wspace/Certificates/SSL_Server_Certificate.txt
        -f /etc/opt/SUNWics5/config/sslpassword.conf
  8. 列出憑證資料庫中的憑證:

    # ./certutil -L -d /etc/opt/SUNWics5/config

  9. ics.conf 檔案中將 SSL 伺服器暱稱配置為已簽署的 SSL 伺服器憑證,例如:“hostname SSL Server Test Cert”。

    注意 ics.conf 檔案中用於 service.http.calendarhostnameservice.http.ssl.sourceurl 參數的主機名稱應符合 SSL 憑證上的主機名稱 (假定您的系統擁有數個別名)。例如:calendar.sesta.com

Procedureics.conf 檔案中配置 SSL 參數

若要將 SSL 與 Calendar Server 配合實作,必須在 ics.conf 檔案中設定特定的參數。如果 ics.conf 檔案中沒有下表中列出的某些參數,則請在該檔案中增加這些參數,並指定其值。由於僅在系統啟動時 (發出 start-cal 時) 讀取 ics.conf,因此新值將在 Calendar Server 重新啟動後才會生效。如需這些 SSL 參數的說明,請參閱E.2.10 Calendar Server SSL 配置參數

  1. 以擁有變更配置權限的管理員身份登入。

  2. 移至 /etc/opt/SUNWics5/cal/config 目錄。

  3. 透過複製及重新命名,儲存舊的 ics.conf 檔案。

  4. 如下表中所示編輯一個或多個參數︰

    參數 

    值 

    encryption.rsa.nssslactivation

    "on"

    encryption.rsa.nssslpersonalityssl

    "SampleSSLServerCert"

    encryption.rsa.nsssltoken

    "internal"

    service.http.tmpdir

    "/var/opt/SUNWics5/tmp"

    service.http.uidir.path

    "html"

    service.http.ssl.cachedir

    "."

    service.http.ssl.cachesize

    "10000"

    local.ssldbpath

    "/etc/opt/SUNWics5/config"

    service.http.ssl.port.enable

    "yes"

    service.http.ssl.port

    "443" (預設 SSL 連接埠)


    備註 –

    而非在連接埠 "80" (HTTP 預設連接埠) 上。


    service.http.securesession

    "yes" (整個階段作業已加密)

    service.http.ssl.sourceurl

    "https://localhost:port" (提供您本地主機的名稱和 service.http.ssl.port 值。)

    service.http.ssl.ssl3.ciphers

    "rsa_red_40_md5,

    rsa_rc2_40_md5,

    rsa_des_sha,

    rsa_rc4_128_md5,

    rsa_3des_sha"

    service.http.ssl.ssl3.sessiontimeout

    "0"

    service.http.sslusessl

    "yes"

  5. 將檔案儲存為 ics.conf

  6. 重新啟動 Calendar Server 以使變更生效。

    cal-svr-base/SUNWics5/cal/sbin/start-cal

7.2 Calendar Server 6.3 軟體 SSL 疑難排解

首先,請定期備份您的憑證資料庫,以免發生無法回復的問題。本小節包含在備份資料庫之後要考慮的事項。

7.2.1 檢查 cshttpd 程序

SSL 要求 Calendar Server cshttpd 程序正在執行。若要確定 cshttpd 是否正在執行,請使用以下指令:

# ps -ef | grep cshttpd

7.2.2 驗證憑證

若要列出憑證資料庫中的憑證並檢查其有效日期,請使用以下指令:

# ./certutil -L -d /etc/opt/SUNWics5/config

7.2.3 查閱 Calendar Server 記錄檔

檢查 Calendar Server 記錄檔,以找出所有的 SSL 錯誤。

7.2.4 連線至 SSL 連接埠

使用瀏覽器和以下 URL 連線至 SSL 連接埠:

https://server-name:ssl-port-number

其中:

server-name 為執行 Calendar Server 的伺服器之名稱。

ssl-port-numberics.conf 檔案中 service.http.ssl.port 參數指定的 SSL 連接埠號碼。預設為 443。

7.2.5 使 cshttpd 停止偵聽一般 HTTP 連接埠

HTTP 和 HTTPS 偵聽不同的連接埠 (SSL 偵聽 443,HTTP 偵聽 80),因此您絕不可能讓二者偵聽同一連接埠。目前,沒有告知 cshttpd 停止偵聽一般 HTTP 連接埠的方法。然而,管理員可以將 service.http.port 變更為未公開的號碼。


注意 – 注意 –

請勿設定 service.http.enable ="no" 來嘗試阻止 cshttpd 偵聽 HTTP。執行此作業會導致 HTTPS 也失敗。service.http.enableservice.http.ssl.port.enable 均必須設定為 "yes",以便正確配置 SSL。