本章說明使用憑證與金鑰認證來保護 Sun Java System Web Server 的安全。還描述如何啟動專用於保護資料、拒絕入侵者和允許存取所需項目之各種安全功能。
閱讀本章之前,您應當熟悉公開金鑰加密的基本概念。這些概念包括加密與解密、公開金鑰與私密金鑰、數位憑證及加密協定。
認證是確認識別的程序。在網路互動的環境下,認證是一方對另一方進行的身份識別。憑證是支援認證的一種方式。
憑證包括的數位資料可指定個人、公司或其他實體的名稱,並證明憑證中包含的公開金鑰屬於該實體。用戶端和伺服器都可以擁有憑證。
憑證由憑證授權單位或 CA 核發並以數位方式簽署。CA 可以是透過網際網路出售憑證的公司,也可以是負責為企業內部網路或企業間網路核發憑證的部門。您可以決定將充分信任的 CA 做為驗證其他使用者身份的機構。
除憑證識別的公開金鑰和實體名稱外,憑證還包括過期日期、核發憑證的 CA 名稱,以及核發憑證之 CA 的「數位簽名」。
必須首先安裝伺服器憑證,然後才能啟動加密。
伺服器認證是指用戶端對伺服器所進行的身份識別,亦即識別應負責特定網路位址上伺服器的組織。
用戶端認證是由伺服器對用戶端所進行的身份識別,亦即識別應使用用戶端軟體的人。用戶端可以擁有多個憑證,就像使用者可以有數個不同的識別部分一樣。
除了 RSA 金鑰,Sun Java System Web Server 7.0 還新支援橢圓曲線加密 (ECC)。
ECC 這款新興的公開金鑰加密系統極受矚目,因為與傳統的加密系統 (如 RSA) 相比,ECC 以更小的金鑰提供同等安全性,這樣計算更快、耗電更低,還可以節省記憶體與頻寬。橢圓曲線加密 (ECC) 已經取得美國政府的認可。
現在,您可以選取是產生憑證請求,還是產生使用 RSA 金鑰或 ECC 金鑰的自我簽署憑證。
以 RSA 金鑰來說,則可以提供不同大小的金鑰 (金鑰大小越大,表示加密越強。預設金鑰大小為 1024)。對於 ECC 金鑰,您應當選擇要用哪種曲線產生金鑰對。多個組織已命名了許多曲線 (ANSI X9.62、NIST、SECG),Sun Java System Web Server 7.0 支援目前指定的所有曲線。
如果您要請求來自 CA 的憑證 (而不是使用自我簽署憑證),一定要先與您喜好的 CA 連絡,以取得其有關 ECC 用法的最新資訊。詢問他們是否針對您的使用情況建議使用特定的 ECC 曲線。如果 CA 或組織內部策略無法指示您如何選擇曲線,下面有一些建議。請記住,ECC 是一種新興技術,因此從此文件編寫完成起,對於特定使用情況的曲線建議可能已經有所改變。
下方列出一些支援的 ECC 曲線:
prime256v1 |
secp256r1 |
nistp256 |
secp256k1 |
secp384r1 |
nistp384 |
secp521r1 |
nistp521 |
sect163k1 |
nistk163 |
sect163r1 |
sect163r2 |
nistb163 |
sect193r1 |
sect193r2 |
sect233k1 |
nistk233k1 |
nistk233 |
sect233r1 |
nistb233 |
sect239k1 |
sect283k1 |
nistk283 |
sect283r1 |
nistb283 |
sect409k1 |
nistk409 |
sect571k1 |
nistk571 |
sect571r1 |
nistb571 |
secp160k1 |
secp160r1 |
secp160r2 |
secp192k1 |
secp192r1 |
nistp192 |
secp224k1 |
secp224r1 |
nistp224 |
prime192v1 |
如果您不需要由 CA 簽署憑證,或是希望在 CA 簽署您的憑證期間測試新 SSL 的實作情況,則可以產生自我簽署的憑證。這個臨時憑證在用戶端瀏覽器中將產生錯誤,造成憑證簽署授權單位未知且不受信任。
若要透過 CLI 建立自我簽署憑證,請執行以下指令。
wadm> create-selfsigned-cert --user=admin --port=8989 --password-file=admin.pwd --config=config1 --token=internal --org-unit=org1 --locality=XYZ --state=DEF --validity=10 --org=sun --country=ABC --server-name=serverhost --nickname=cert1 |
請參閱 CLI 參照 create-selfsigned-cert(1)。
憑證是由數位資料組成,這些資料將指定個人、公司或其他實體的名稱,並證明憑證中包含的公開金鑰屬於該個人。啟用 SSL 的伺服器必須擁有憑證,但用戶端不一定要有憑證。
憑證由憑證授權單位或 CA 核發並以數位方式簽署。CA 可以是透過網際網路出售憑證的公司,也可以是負責為企業內部網路或企業間網路核發憑證的部門。您可以決定將充分信任的 CA 做為驗證其他使用者身份的機構。
您可以請求憑證並將憑證提交至憑證授權單位 (CA)。如果您的公司有自己的內部 CA,則可以向其請求憑證。如果計劃從商業 CA 購買憑證,請選擇一個 CA 並詢問其所需資訊的特定格式。您也可以為伺服器建立自我簽署的憑證。自我簽署的憑證不適用於連到網際網路的部署,但是對於開發和測試則非常有用,因為可讓您設定測試伺服器而無須 CA 介入。
如上文所述,憑證包括實體 (此案例中為 Web 伺服器) 的公開金鑰。公開金鑰是根據特定的演算法產生 (憑證中內建演算法類型程式碼)。下一節將提供 Web 伺服器所支援的金鑰演算法類型的背景說明。
按一下 [伺服器憑證] 標籤 > [請求] 按鈕。
選取配置
從配置清單中選取您要為其安裝憑證的配置。
選取記號
選取包含金鑰的記號 (加密裝置)。如果金鑰儲存在由 Sun Java System Web Server 7.0 維護的本機金鑰資料庫中,請選擇 [內部]。如果金鑰儲存在智慧卡或其他外部裝置或引擎中,請從下拉式清單方塊中選擇外部記號的名稱。輸入所選記號的密碼。
輸入詳細資訊
開始請求程序之前,請確保您已瞭解 CA 所需的資訊。無論是向商業 CA 還是向內部 CA 請求伺服器憑證,您都需要提供以下資訊:
伺服器名稱必須是 DNS 查詢中使用的完全合格的主機名稱 (例如 www.sun.com)。這是瀏覽器連線至您網站所使用的 URL 中的主機名稱。如果這兩個名稱不相符,則會通知用戶端憑證名稱與網站名稱不相符,由此懷疑憑證的可信賴性。
如果要從內部 CA 請求憑證,則也可以在此欄位中輸入萬用字元或常規表示式。大多數供應商將不會核准為一般名稱輸入萬用字元或常規表示式的憑證請求。
[組織] 是指公司、教育機構、夥伴等的正式、合法名稱。大多數 CA 都要求您提出法律文件 (如營業執照副本) 來驗證此資訊。
[組織單位] 為可選欄位,說明公司內部的組織。也可以用於標註不太正式的公司名稱 (不帶 Inc.、Corp. 等的名稱)。
[地區] 為可選欄位,通常用於說明組織所在城市和公國。
[州或省] 為選擇性欄位。
[國家/地區] 是您所在國家/地區名稱的兩個字元縮寫 (ISO 格式)。美國的國家代碼為 US。
所有這些資訊組合成稱為辨別名稱 (DN) 的一系列「屬性-值」對,由此形成憑證的主體。
選擇憑證選項
需要您提供金鑰資訊。對於金鑰類型,您可以選擇 RSA 或 ECC。如果金鑰類型為 RSA,則金鑰大小可以為 1024、2048 或 4098。如果您的金鑰類型為 ECC,則還需要選取曲線。請記住,產生新的金鑰對需要花費一些時間。金鑰長度越長,精靈產生金鑰所需的時間便越長。
請確定選取 CA (您稍後要向其提交請求以進行簽署) 可以支援的金鑰類型。
選取憑證類型
為憑證選取憑證簽署授權單位 (CSA) (是自我簽署或由 CA 簽署)。如果選取自我簽署的憑證,則還可以將憑證與 HTTP 偵聽程式建立關聯。您也可以稍後再執行此動作。
產生請求
如果是 CA 簽署的憑證,則產生的憑證請求將為 ASCII 格式。如果是自我簽署的憑證,則會直接進行安裝。如果是自我簽署的類型,請提供暱稱、有效期 (月數) 以及 HTTP 偵聽程式名稱的值,以便處理安全請求。
檢視結果
此頁面為您提供了所選選項的摘要。按一下 [完成] 可完成請求產生過程。
使用 CLI
若要透過 CLI 請求憑證,請執行以下指令。
wadm> create-cert-request --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --server-name=servername.org --org=sun --country=ABC --state=DEF --locality=XYZ --token=internal |
請參閱 CLI 參照 create-cert-request(1)。
從 CA 取得憑證之後,您可以使用 Administration Console 為配置安裝憑證。
按一下 [伺服器憑證] 標籤 > [安裝] 按鈕。
選取配置
從配置清單中選取您要為其安裝憑證的配置。
選取記號
選取包含金鑰的記號 (加密裝置)。如果金鑰儲存在由 Sun Java System Web Server 7.0 維護的本機金鑰資料庫中,請選擇 [內部]。如果金鑰儲存在智慧卡或其他外部裝置或引擎中,請從下拉式清單方塊中選擇外部記號的名稱。輸入所選記號的密碼。
輸入憑證資料
在提供的文字區中,將憑證文字貼上。複製並貼上文字時,一定要包括「起始憑證」和「結束憑證」標頭—包括起始和結束連字符。您也可以按一下 [瀏覽] 按鈕,然後手動選取 DER 檔案。
提供憑證詳細資訊
提供用於憑證的暱稱。從可用清單中選取 HTTP 偵聽程式,以處理安全請求。
檢視結果
此頁面為您提供了所選選項的摘要。按一下 [完成] 可完成安裝程序。
使用 CLI
若要透過 CLI 安裝憑證,請執行以下指令。
wadm> install-cert --user=admin --port=8989 --password-file=admin.pwd --config=config1 --token=internal --cert-type=server --nickname=cert1 cert.req |
其中 cert.req 包含憑證資料。
請參閱 CLI 參照 install-cert(1)。
您可以透過執行以下步驟來更新現有憑證:
按一下 [伺服器憑證] 標籤 > [憑證名稱] > [更新] 按鈕。
提供記號資訊
如果需要,請輸入記號的密碼。否則按 [下一步] 繼續。
更新憑證詳細資訊
查看憑證詳細資訊,並提供有效期限 (以月為單位)。
更新金鑰資訊
對於金鑰類型,您可以選擇 RSA 或 ECC。如果金鑰類型為 RSA,則金鑰大小可以為 1024、2048 或 4098。如果您的金鑰類型為 ECC,則還需要選取曲線。請記住,產生新的金鑰對需要花費一些時間。
檢視摘要
此頁面為您提供了所選選項的摘要。按一下 [完成] 以完成更新程序。
若要刪除憑證,請執行以下作業:
按一下 [伺服器憑證] 標籤。
選取憑證
從憑證清單中選取憑證名稱。
刪除憑證
按一下 [刪除] 按鈕以刪除所選憑證。
使用 CLI
若要透過 CLI 刪除憑證,請執行以下指令:
wadm> delete-cert --user=admin --port=8989 --password-file=admin.pwd --token=internal --config=config1 cert1 |
請參閱 CLI 參照 delete-cert(1)。
若要更新管理伺服器憑證,請執行指令 renew-admin-certs CLI 指令。使用此指令可以更新暱稱為 Admin-CA-Cert、Admin-Server-Cert 和 Admin-Client-Cert 的管理認證。此指令還可更新目前正在執行且使用更新的憑證可進行存取的節點。
執行此指令後,建議您重新啟動管理伺服器和節點,以便使新憑證生效。如果在更新憑證期間節點已離線 (未執行或由於網路問題無法存取),則需要重新註冊此節點。若要更新管理伺服器憑證,請執行以下指令。
wadm> renew-admin-certs --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --validity=120 |
請參閱 CLI 參照 renew-admin-certs(1)。
憑證撤銷清單 (CRL) 可公佈用戶端或伺服器使用者不應再信任的所有憑證和金鑰。如果憑證中的資料發生變更,例如使用者在憑證過期前換單位或離職,則將會撤銷憑證,並將資料顯示在 CRL 中。CRL 由 CA 產生並定期更新。
若要從 CA 取得 CRL,請執行以下步驟:
從 CA 取得 CRL 做為檔案。
移至 Administration Console 中的配置頁面。
按一下 [憑證] > [憑證授權單位] 標籤。
按一下 [安裝 CRL] 按鈕
輸入相關聯檔案的完整路徑名稱。
按一下 [確定]。
如果資料庫中已經存在 CRL,則將會顯示 [替代憑證撤銷清單] 頁面。
您可能需要按一下 [部署] 以使變更生效。
使用 CLI
若要透過 CLI 安裝 CRL,請執行以下指令。
wadm> install-crl --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 data/install-crl/ServerSign.crl |
請參閱 CLI 參照 install-crl(1)。
移至 Administration Console 中的配置頁面。
按一下 [憑證] > [憑證授權單位] 標籤。
選取 CRL 項目並按一下 [刪除]。
您可能需要按一下 [部署] 以使變更生效。
使用 CLI
若要透過 CLI 刪除 CRL,請執行以下指令。
wadm> delete-crl --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 issuer |
請參閱 CLI 參照 delete-crl(1)。
若要設定內部 PKCS11 記號的密碼,請執行以下作業:
移至 Administration Console 中的配置頁面。
按一下 [憑證] > [PKCS11 記號] 標籤。
按一下 PKCS11 記號名稱 (預設為內部)。
選取 [記號狀態] 核取方塊。
輸入密碼資訊。
如果您不希望在實例啟動時提示您輸入密碼,請選取 [在實例啟動時不提示您輸入新密碼] 核取方塊。按一下 [確定]。
密碼將儲存在配置中。若要移除密碼,請執行上述步驟並選取 [取消設定密碼] 選項。
使用 CLI
若要透過 CLI 設定內部 PKCS11 記號的密碼,請執行以下指令。
wadm> set-token-pin --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --token=internal |
請參閱 CLI 參照 set-token-pin(1)。
使用指令 create-cert-request 可產生請求並將此請求傳送至 CA。稍後,當您收到來自 CA 的憑證時,將需要使用 install-cert 指令來安裝此憑證。如果要遷移的 Java 金鑰庫中有金鑰與憑證,請使用 migrate-jks-keycert 指令。對於開發/測試伺服器,最簡單的方法就是使用 create-selfsigned-cert 指令產生自我簽署的憑證。
wadm> create-selfsigned-cert --server-name=hostname --nickname=MyServerCert --token=internal |
請參閱線上手冊以瞭解更多選項與範例。
安裝憑證後,您需要在某個將啟用 SSL 的連接埠上安裝偵聽程式。
wadm> create-http-listener --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --listener-port=18003 --config=config1 --server-name=config1.com --default-virtual-server-name=config1_vs_1 config1_ls_1 |
現在啟用偵聽程式的 SSL 功能,並將該偵聽程式與憑證的暱稱相關聯。
wadm> set-ssl-prop --http-listener=http-listener-ssl enabled=true wadm> set-ssl-prop --http-listener=http-listener-ssl server-cert-nickname=MyServerCert |
完成此設定之後,請部署配置並啟動實例。
wadm> deploy-config config_name wadm> start-instance --config config_name hostname |
若要啟用配置的 SSL 加密,請執行以下指令。
wadm> enable-ciphers --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --http-listener=http-listener-1 --cipher-type=ssl2 SSL_RC4_128_WITH_MD5 |
請參閱 CLI 參照 enable-ciphers(1)。
只有存在可用的已安裝憑證時,才能啟用 HTTP 偵聽程式的安全性。
一旦擁有了憑證,您便可以將憑證與 HTTP 偵聽程式相關聯,從而確保伺服器的安全。
加密是變換資訊的程序,因此除了預定的收件者之外,這些資訊對任何人都是毫無意義的。解密是變換加密資訊的程序,使這些資訊再次變得有意義。Sun Java System Web Server 可支援 SSL 和 TLS 通訊協定。
密碼是一種加密演算法 (一種數學函數),用於加密或解密。SSL 和 TLS 協定包含多個密碼組。有些密碼會比其他密碼更強、更安全。一般說來,密碼使用的位元越多,解密資料就越困難。
在任何雙向加密程序中,雙方必須使用相同的密碼。因為有許多密碼可用,所以您需要為伺服器啟用那些最常用的密碼。
在安全的連線期間,用戶端與伺服器同意使用雙方均具有最強加密進行通訊。您可以從 SSL2、 SSL3 和 TLS 通訊協定中選擇密碼。
SSL 版本 2.0 之後對 SSL 的安全性和效能進行了改進;除非用戶端無法使用 SSL 3,否則不要使用 SSL 2。使用 SSL 2 密碼無法保證用戶端憑證的安全性。
僅加密程序本身不足以確保伺服器機密資訊的安全。金鑰必需與加密密碼一起使用,才能產生實際的加密結果或解密先前加密的資訊。加密程序使用兩個金鑰來達到此結果:公開金鑰和私密金鑰。使用公開金鑰加密的資訊僅可透過相關聯的私密金鑰進行解密。公開金鑰做為憑證的一部分進行發佈;僅相關聯的私密金鑰需要安全保護。
Sun Java System Web Server 支援安全傳輸層 (SSL) 以及傳輸層安全性 (TLS) 通訊協定進行加密通訊。SSL 和 TLS 與應用程式無關,並且可以在其上放置更高層級的協定 (不需設定)。
SSL 和 TLS 通訊協定支援多種密碼,這些密碼用於伺服器和用戶端的相互認證、傳輸憑證和建立階段作業金鑰。根據所支援的通訊協定、公司對加密強度的策略、政府對加密軟體的出口限制等因素,用戶端和伺服器可能支援不同的密碼組或密碼集。除了其他功能之外,SSL 和 TLS 訊號交換協定會決定伺服器和用戶端如何協商使用哪種密碼組進行通訊。
按一 下 [配置] > [HTTP 偵聽程式] > [安全性] 標籤,來編輯 HTTP 偵聽程式安全性設定。下表列出此頁面中可配置的特性。
表 6–1 HTTP 偵聽程式安全性特性