本文介紹如何在GlassFish伺服器配置SSL認證,具體包括下載和上傳認證檔案,在GlassFish上配置認證檔案、憑證鏈結和認證密鑰等參數,以及安裝認證後結果的驗證。
本文以Linux作業系統、glassfish-4.1.2-web中預設domain1容器為例介紹。不同的作業系統或GlassFish伺服器,部署操作可能有所差異。
前提條件
操作步驟
步驟一:下載SSL認證
步驟二:在GlassFish伺服器安裝認證
登入 Linux 伺服器。
阿里雲伺服器
以下操作以阿里雲Elastic Compute Service 為例進行說明,其他類型的伺服器請參照對應產品文檔進行操作。
登入ECS管理主控台,在頁面左側頂部,選擇目標ECS執行個體所在地區。
在左側導覽列中選擇,在執行個體頁面找到目標ECS執行個體,點擊操作列的遠程連接。
在彈出的對話方塊中,選擇通過Workbench遠端連線並單擊立即登錄。
選擇終端串連作為串連方式,輸入相關認證資訊,並根據頁面提示完成登入,即可進入伺服器終端。詳細操作請參考使用Workbench登入ECS執行個體。
說明若系統彈出“安全性群組白名單開通提示”面板,請按照頁面提示單擊一鍵添加。
其他雲廠商伺服器
請通過對應雲廠商提供的遠端連線功能登入伺服器終端。
非雲廠商伺服器(如物理伺服器、IDC受管理的主機等)
請在本地使用SSH工具登入伺服器終端。
後續部分命令因作業系統類型不同而略有差異。請根據實際的伺服器作業系統,選擇對應的命令操作。
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執行個體,單擊目標執行個體名稱進入執行個體詳情頁面,請參考添加安全性群組規則,在安全性群組中添加一條授權策略為允許、協議類型為 TCP、目的連接埠範圍為 HTTPS(443)、授權對象為任何位置(0.0.0.0/0)的規則。
在防火牆中開放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安裝目錄下建立一個用於存放認證的目錄。
進入glassfish安裝目錄。
本樣本glassfish4安裝在home路徑下,請您根據實際情況調整。
cd /home/glassfish4建立認證目錄,命名為cert。
mkdir cert
將認證檔案和私密金鑰檔案上傳到cert目錄。
說明您可以使用遠程登入工具的本地檔案上傳功能來上傳檔案。例如PuTTY、Xshell或WinSCP等工具。如果您使用的是阿里雲Elastic Compute Service,關於上傳檔案的具體操作,請參見上傳或下載檔案。
在cert目錄下,執行openssl命令,將下載的PEM格式的認證轉換為PKCS12格式,並修改密碼為changeit,命名為mycert.p12,別名為s1as。
說明domain_name.pem與domain_name.key需分別替換為實際的認證檔案和認證私密金鑰檔案。
changeit是GlassFish伺服器中內建的認證的預設密碼,如果您修改過,請使用實際的認證密碼。
openssl pkcs12 -export -in domain_name.pem -inkey domain_name.key -out mycert.p12 -passout pass:changeit -name s1as在cert目錄下,執行keytool命令,將mycert.p12轉換為JKS格式,命名為keystore.jks,別名為s1as。
keytool -importkeystore -destkeystore keystore.jks -srckeystore mycert.p12 -srcstoretype PKCS12 -alias s1as執行keytool命令後,會提示設定keystore.jks密碼和輸入原mycert.p12密碼,均為changeit。
在cert目錄下,執行keytool命令,將下載的PEM格式的認證轉換為JKS格式,命名為cacerts.jks,別名為s1as。
domain_name.pem替換為實際的認證檔案。
keytool -importcert -trustcacerts -destkeystore cacerts.jks -file domain_name.pem -alias s1as執行keytool命令後,會提示設定cacerts.jks密碼,您需設定為changeit。
在cert目錄下,執行以下命令,替換/home/glassfish4/glassfish/domains/domain1/config目錄下的cacerts.jks和keystore.jks檔案。
替換cacerts.jks
cp ./cacerts.jks /home/glassfish4/glassfish/domains/domain1/config替換keystore.jks
cp ./keystore.jks /home/glassfish4/glassfish/domains/domain1/config
編輯/home/glassfish4/glassfish/domains/domain1/config/domain.xml設定檔,修改連接埠號碼。
定位到如下圖所示network-listeners位置,並按照下述樣本修改連接埠號碼,修改時請注意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>進入/home/glassfish4/glassfish/bin目錄,執行如下命令,重啟伺服器。
./asadmin restart-domain domain1
步驟三:驗證SSL認證是否安裝成功
請通過 HTTPS 訪問您已綁定認證的網域名稱(如
https://example.com,example.com需替換為實際網域名稱)。若瀏覽器地址欄顯示安全鎖表徵圖,說明認證已成功部署。如訪問異常或未顯示安全鎖,請先清除瀏覽器緩衝或使用無痕(隱私)模式重試。

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