本文介紹如何在GlassFish伺服器配置SSL認證,具體包括下載和上傳認證檔案,在GlassFish上配置認證檔案、憑證鏈結和認證密鑰等參數,以及安裝認證後結果的驗證。
本文以 Linux 作業系統和 GlassFish 4.1.2-web 的預設 domain1 容器為例進行介紹。不同作業系統或 GlassFish 版本的部署操作可能存在差異。
適用範圍
操作步驟
步驟一:下載SSL認證
步驟二:在GlassFish伺服器安裝認證
登入 Linux 伺服器。
阿里雲伺服器:請參考使用Workbench登入Linux執行個體。
非阿里雲伺服器:請通過對應廠商提供的遠端連線功能登入伺服器終端。
後續部分命令因作業系統類型不同而略有差異。請根據實際的伺服器作業系統,選擇對應的命令操作。
RHEL/CentOS 系列:包括 Alibaba Cloud Linux、Red Hat Enterprise Linux、CentOS、AlmaLinux、Rocky Linux、Anolis OS 及其衍生版本。
Debian/Ubuntu 系列:包括 Debian、Ubuntu 及其衍生版本。
開放安全性群組和防火牆的 443 連接埠。
在伺服器終端執行以下命令,檢測443連接埠的開放情況:
RHEL/CentOS
command -v nc > /dev/null 2>&1 || sudo yum install -y nc # 請將以下的 <當前伺服器的公網 IP> 替換為當前伺服器的公網 IP sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <當前伺服器的公網 IP> 443如果輸出
Ncat: Connected to <當前伺服器公網 IP>:443,則表明443連接埠已開放。否則需在安全性群組和防火牆中開放443連接埠。Debian/Ubuntu
command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat # 請將以下的 <當前伺服器的公網 IP> 替換為當前伺服器的公網 IP sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <當前伺服器的公網 IP> 443若輸出
Connection to <當前伺服器公網 IP> port [tcp/https] succeeded!或[<當前伺服器公網 IP>] 443 (https) open,則表明443連接埠已開放。否則需在安全性群組和防火牆中開放443連接埠。在安全性群組配置開放443連接埠。
請確保安全性群組已開放 443 連接埠 (TCP),否則外部無法訪問服務。以下操作以阿里雲 ECS 為例:
進入Elastic Compute Service執行個體頁面,選擇目標 ECS 執行個體所在地區,單擊目標執行個體名稱,進入執行個體詳情頁。
單擊,確儲存在一條授權對象為允許、授權對象為 TCP、授權對象為 HTTPS(443)、授權對象為任何位置(0.0.0.0/0)(或其它地址,確保 PC 可遠端存取即可)的規則。
如不存在上述規則,請參照添加安全性群組規則在目標安全性群組中添加相應規則。
在防火牆中開放443連接埠。
執行以下命令,識別系統當前的防火牆服務類型:
if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then echo "firewalld" elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then echo "ufw" elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then echo "nftables" elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then echo "iptables" elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then echo "iptables" else echo "none" fi若輸出為
none,則無需進一步操作。否則,請根據輸出的類型(firewalld、ufw、nftables、iptables),執行以下命令開放 443 連接埠:firewalld
sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reloadufw
sudo ufw allow 443/tcpnftables
sudo nft add table inet filter 2>/dev/null sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/nulliptables
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT為避免 iptables 規則在系統重啟後失效,請執行以下命令持久化 iptables 規則:
RHEL/CentOS
sudo yum install -y iptables-services sudo service iptables saveDebian/Ubuntu
sudo apt-get install -y iptables-persistent sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null
建立認證存放目錄。
進入 GlassFish 安裝目錄(本文以
/home/glassfish4為例),建立名為cert的目錄並進入該目錄。cd /home/glassfish4 mkdir cert cd cert上傳認證與私密金鑰檔案至
cert目錄。說明您可以使用遠程登入工具的本地檔案上傳功能來上傳檔案。例如PuTTY、Xshell或WinSCP等工具。如果您使用的是阿里雲Elastic Compute Service,關於上傳檔案的具體操作,請參見上傳或下載檔案。
轉換認證格式(PEM 轉 PKCS12)。
GlassFish 使用 JKS 格式密鑰庫,需先將 PEM 格式轉換為 PKCS12 格式。在
cert目錄中執行以下命令,產生名為mycert.p12的檔案,並將別名指定為s1as。openssl pkcs12 -export -in domain_name.pem -inkey domain_name.key -out mycert.p12 -name s1as說明請將
domain_name.pem和domain_name.key替換為實際的認證檔案和認證私密金鑰檔案路徑。執行命令時,將提示設定匯出密碼。建議將密碼設定為 GlassFish 的預設密鑰庫(keystore.jks)密碼(預設為
changeit),可避免後續配置問題。若設定為其他密碼,後續需進行密鑰條目密碼同步化。
停止 GlassFish 服務。
在修改密鑰庫與配置前停止服務:
/home/glassfish4/glassfish/bin/asadmin stop-domain domain1備份密鑰庫與設定檔。
為防止配置錯誤導致無法啟動,請備份 GlassFish 的預設密鑰庫檔案
keystore.jks。cp /home/glassfish4/glassfish/domains/domain1/config/keystore.jks /home/glassfish4/glassfish/domains/domain1/config/keystore.jks.bak cp /home/glassfish4/glassfish/domains/domain1/config/domain.xml /home/glassfish4/glassfish/domains/domain1/config/domain.xml.bak移除預設認證別名。
GlassFish 預設使用別名
s1as進行 SSL 通訊。需先從密鑰庫中刪除該預設條目,以便後續替換。keytool -delete -alias s1as -keystore /home/glassfish4/glassfish/domains/domain1/config/keystore.jks執行命令時需輸入密鑰庫 keystore.jks 的密碼(預設為
changeit)。匯入新認證到密鑰庫。
將
mycert.p12匯入系統密鑰庫keystore.jks,並保持別名為s1as。keytool -importkeystore \ -srckeystore mycert.p12 -srcstoretype PKCS12 \ -destkeystore /home/glassfish4/glassfish/domains/domain1/config/keystore.jks \ -deststoretype JKS \ -alias s1as執行命令時將依次提示輸入以下密碼:
目標密鑰庫密碼:輸入密鑰庫
keystore.jks的密碼(預設為changeit)。源密鑰庫密碼:輸入步驟 5 中建立
mycert.p12時設定的匯出密碼。若
mycert.p12的匯出密碼和keystore.jks的密碼不同,請繼續執行以下命令同步密鑰條目密碼:keytool -keypasswd -alias s1as \ -keystore /home/glassfish4/glassfish/domains/domain1/config/keystore.jks \ -storepass <密鑰庫 keystore.jks 的密碼> \ -keypass <mycert.p12的匯出密碼> \ -new <密鑰庫 keystore.jks 的密碼>
修改連接埠配置。
編輯
/home/glassfish4/glassfish/domains/domain1/config/domain.xml檔案。定位<network-listeners>標籤,將 HTTP 和 HTTPS 連接埠分別修改為 80 和 443(如下所示):<network-listeners> <network-listener protocol="http-listener-1" port="80" name="http-listener-1" thread-pool="http-thread-pool" transport="tcp"></network-listener> <network-listener protocol="http-listener-2" port="443" name="http-listener-2" thread-pool="http-thread-pool" transport="tcp"></network-listener> <network-listener protocol="admin-listener" port="4848" name="admin-listener" thread-pool="admin-thread-pool" transport="tcp"></network-listener> </network-listeners>啟動 GlassFish 服務。
cd /home/glassfish4/glassfish/bin sudo ./asadmin start-domain domain1
步驟三:驗證SSL認證是否安裝成功
請通過 HTTPS 訪問您已綁定認證的網域名稱(如
https://example.com,example.com需替換為實際網域名稱)。若瀏覽器地址欄顯示安全鎖表徵圖,說明認證已成功部署。如訪問異常或未顯示安全鎖,請先清除瀏覽器緩衝或使用無痕(隱私)模式重試。

Chrome 瀏覽器自 117 版本起,地址欄中的
已被新的
替代,需單擊該表徵圖後查看安全鎖資訊。
如仍有問題,請參考常見問題進行排查。
常見問題
安裝或更新認證後,認證未生效或 HTTPS 無法訪問
常見原因如下:
伺服器安全性群組或防火牆未開放 443 連接埠。請參見開放安全性群組和防火牆的 443 連接埠。
認證的綁定網域名稱未包含當前訪問的網域名稱。請參見如何判斷綁定網域名稱是否已匹配所有需保護的網域名稱。
修改 GlassFish 應用檔案配置後,未重啟GlassFish服務。具體操作可參見重啟GlassFish服務。
認證檔案未正確替換,或 GlassFish 配置未正確指定憑證路徑。請檢查 GlassFish 的認證配置和所用認證檔案是否為最新且有效。
網域名稱已接入 CDN、SLB 或 WAF 等雲產品,但未在相應產品中安裝認證。請參閱流量經過多個雲產品時認證的部署位置完成相關操作。
當前網域名稱的 DNS 解析指向多台伺服器,但認證僅在部分伺服器上安裝。需分別在每個伺服器中安裝認證。
如需進一步排查,請參考:根據瀏覽器錯誤提示解決認證部署問題 和 SSL認證部署故障自助排查指南。
如何更新(替換)GlassFish 中已安裝的 SSL 憑證
請先備份伺服器上原有的認證檔案(.pem 和 .key),然後登入數位憑證管理服務控制台,下載新的認證檔案,並上傳到目標伺服器覆蓋原有檔案(確保路徑和檔案名稱一致)。最後,重啟GlassFish服務,使新認證生效。