您可以在JBoss伺服器上安裝SSL認證,實現通過HTTPS安全訪問Web服務。本文介紹如何為JBoss伺服器安裝SSL認證。
本文以Linux作業系統、jboss-as-7.1.1.Final為例介紹。不同版本的作業系統或JBoss伺服器,部署操作可能有所差異。
前提條件
操作步驟
步驟一:下載SSL認證
步驟二:在JBoss伺服器安裝SSL認證
登入 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
執行以下命令,在JBoss的standalone/configuration目錄下,建立一個用於存放認證的cert目錄。
mkdir cert #建立認證目錄,命名為cert。將認證檔案上傳至cert目錄。
說明您可以使用遠程登入工具附帶的本地檔案上傳功能,上傳檔案。例如PuTTY、Xshell或WinSCP等。
如果您使用的是阿里雲Elastic Compute Service,上傳檔案具體操作,請參見使用遠端桌面或Windows APP向Windows執行個體傳輸檔案或上傳檔案到Linux雲端服務器。
開啟JBoss設定檔standalone.xml,定位到以下參數,參考注釋修改與認證相關的配置。
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false"> <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/> <!-- 配置認證密碼和憑證路徑。 password填寫jks-password.txt中的認證密碼。 certificate-key-file填寫認證實際存放的位置。 --> <connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" secure="true"> <ssl name="https" password="******" certificate-key-file="../standalone/configuration/cert/domain_name.jks"/> </connector> </subsystem> <!--配置遠端存取JBoss及HTTPS連接埠--> <interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:127.0.0.1}"></inet> </interface> <!--開啟遠端存取--> <interface name="public"> <inet-address value="${jboss.bind.address:0.0.0.0}"></inet> </interface> <interface name="unsecure"> <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"></inet> </interface> </interfaces> <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"></socket> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"></socket> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"></socket> <socket-binding name="ajp" port="8009"></socket> <!--修改http連接埠為80--> <socket-binding name="http" port="80"></socket> <!--修改https連接埠為443--> <socket-binding name="https" port="443"></socket> <socket-binding name="osgi-http" interface="management" port="8090"></socket> <socket-binding name="remoting" port="4447"></socket> <socket-binding name="txn-recovery-environment" port="4712"></socket> <socket-binding name="txn-status-manager" port="4713"></socket> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"></remote> </outbound-socket-binding> </socket-binding-group>進入JBoss目錄中的bin目錄,執行以下命令,重啟JBoss伺服器。
sh standalone.sh
步驟三:驗證SSL是否安裝成功
請通過 HTTPS 訪問您已綁定認證的網域名稱(如
https://example.com,example.com需替換為實際網域名稱)。若瀏覽器地址欄顯示安全鎖表徵圖,說明認證已成功部署。如訪問異常或未顯示安全鎖,請先清除瀏覽器緩衝或使用無痕(隱私)模式重試。

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