首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

GlassFish v2 SSL 全攻略:從開發者配置到企業級 NSS 憑證部署

     編輯:Java 相關知識

SSL/TLS 是企業級應用傳輸層安全的基石。GlassFish v2 提供三種配置檔,安全存儲機制各異:Developer (JKS)、Cluster (JKS + 複寫)、Enterprise (NSS)。本文詳細解析三種模式下,從自簽憑證替換為 CA 簽署憑證的完整操作流程。

核心概念速覽

  • 金鑰對:公鑰加密,私鑰解密;私鑰絕不外洩。
  • 數位憑證:綁定公鑰與身份 (CN, OU, O 等),由 CA 簽名背書。
  • Keystore (JKS):Java 標準儲存私鑰+憑證鏈的加密容器。
  • Truststore (cacerts.jks):儲存受信任 CA 根憑證。
  • NSS 資料庫:Enterprise 配置使用的 Mozilla 網路安全服務資料庫 (cert8.db, key3.db)。

模式一:Developer / Cluster 配置 (JKS 架構)

預設別名:s1as (GlassFish 專用)。工具:JDK 6 keytool (支援 -genkeypair, -certreq)。

步驟 1:刪除預設自簽憑證

keytool -delete -alias s1as -keystore keystore.jks -storepass changeit

步驟 2:生成新金鑰對與自簽憑證 (臨時)

keytool -genkeypair -keyalg RSA -keystore keystore.jks -validity 365 -alias s1as -storepass changeit
# 過程中輸入 CN=FQDN (必須與網站完整域名一致),否則瀏覽器會彈出名稱不符警告

步驟 3:產生 CSR (Certificate Signing Request)

keytool -certreq -alias s1as -file s1as.csr -keystore keystore.jks -storepass changeit

步驟 4:提交 CSR 至 CA (如 VeriSign),取得簽署憑證回覆

將回覆 (含 -----BEGIN CERTIFICATE-----) 存為 s1as.cert。同步下載 CA 根憑證與中介憑證匯入瀏覽器/客戶端 Truststore。

步驟 5:將 CA 簽署憑證導入 Keystore 替換自簽條目

推薦方式:使用 Java 程式碼精準替換 (保留原私鑰):

// 參數: CA回覆檔, keystore路徑, keystore密碼, 別名
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate cert = cf.generateCertificate(new FileInputStream(csrReplyFile));

KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystoreLoc), storePass.toCharArray());
Key key = ks.getKey(alias, storePass.toCharArray());
ks.setKeyEntry(alias, key, storePass.toCharArray(), new Certificate[]{cert});
ks.store(new FileOutputStream(keystoreLoc), storePass.toCharArray());

替代方式 (keytool 僅限導入信任鏈):需先 -importcert 根/中介 CA 至 keystore (別名不同),再 -importcert 伺服器憑證至 s1as,但較繁瑣且易出錯。

步驟 6:重啟 GlassFish 生效

模式二:Enterprise 配置 (NSS 架構)

無 JKS,改用 NSS 資料庫 ($AS_NSS_DB 環境變數指向)。需額外工具:pk12util (NSS 工具)、openssl、certutil。

流程差異點

  1. 起始無 keystore,先建立空 JKS 暫存金鑰對 (步驟 1-4 同 JKS 模式)。
  2. 步驟 5 替換為:將私鑰+簽署憑證導出為 PKCS#12 (.pfx) → 匯入 NSS。

詳細操作

# 1. 從暫存 JKS 導出私鑰 (PEM 格式) - 需 keyexport 工具 (XWSS 專案提供)
keyexport.bat -keyfile serverkey.pem -keystore keystore.jks -storepass changeit -alias s1as
# 輸入密碼 (同 keystore) → 產生 serverkey.pem (含私鑰)

# 2. 附加 CA 簽署憑證至 serverkey.pem 末尾 (在 -----END PRIVATE KEY----- 之後)
cat s1as.cert >> serverkey.pem

# 3. 轉換為 PKCS#12
openssl pkcs12 -export -in serverkey.pem -out s1as.pfx
# 輸入導出密碼 (如 changeit)

# 4. 刪除 NSS 中舊別名 (若存在)
certutil -D -n s1as -d $AS_NSS_DB

# 5. 匯入 PKCS#12 至 NSS
pk12util -i s1as.pfx -d $AS_NSS_DB
# 輸入 NSS 軟令牌密碼與 PFX 密碼 → 顯示 "PKCS12 IMPORT SUCCESSFUL"

跨模式憑證遷移技巧

來源目標工具/指令
PKCS#12 (.pfx)JKS (Developer)pkcs12import.sh -file s1as.pfx -alias s1as -keystore keystore.jks -storepass changeit -pass <pfx密碼>
JKSNSS (Enterprise)同上 openssl → pk12util 流程

常見問題排查

  • 瀏覽器警告「憑證名稱不符」:CSR 產生時 CN 必須等於網站 FQDN (如 app.example.com),不可用 IP 或 localhost。
  • 啟動失敗「Keystore was tampered」:storepass 與 keypass 不一致,GlassFish 要求兩者相同。
  • NSS 匯入失敗:確認 $AS_NSS_DB 指向正確目錄 (含 cert8.db, key3.db),且 pk12util 版本相容。
  • Cluster 模式:需手動將配置好的 keystore.jks、cacerts.jks 複寫至所有節點相同路徑。

結語

GlassFish v2 SSL 配置的核心難點在於「金鑰對生成 → CSR → CA 簽署 → 精準替換私鑰條目」的流程完整性。Developer/Cluster 依賴 JKS + keytool/Java 代碼;Enterprise 則轉向 NSS + PKCS#12 橋接。建議生產環境統一使用 CA 簽署憑證,並自動化部署腳本化,確保叢集一致性與憑證週期管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved