全部產品
Search
文件中心

Certificate Management Service:在GlassFish伺服器安裝SSL認證(Linux)

更新時間:Mar 04, 2026

本文介紹如何在GlassFish伺服器配置SSL認證,具體包括下載和上傳認證檔案,在GlassFish上配置認證檔案、憑證鏈結和認證密鑰等參數,以及安裝認證後結果的驗證。

重要

本文以 Linux 作業系統和 GlassFish 4.1.2-web 的預設 domain1 容器為例進行介紹。不同作業系統或 GlassFish 版本的部署操作可能存在差異。

適用範圍

  • 已通過數位憑證管理服務購買和申請認證(狀態已簽發)。如需購買和申請認證,請參見購買正式認證申請認證

  • 網域名稱已正確解析至當前伺服器。

  • 已獲得本伺服器的系統管理權限(即“root帳號”或“有 sudo 許可權”的帳號)。

操作步驟

步驟一:下載SSL認證

  1. 進入SSL認證管理頁面,定位需部署的目標認證,並確認以下資訊:

    1. 認證狀態:確保其為已簽發。若為即將到期已到期,則需續約SSL認證

    2. 綁定網域名稱:確保其能夠匹配所有需保護的網域名稱,否則未匹配的網域名稱訪問 HTTPS 時將出現安全警告。如需添加或修改,請參見追加和更換網域名稱

      確認認證是否匹配目標網域名稱

      認證的綁定網域名稱可包含多個精確網域名稱和萬用字元網域名稱。每類網域名稱的匹配規則如下:

      • 精確網域名稱:僅對指定網域名稱生效。

        • example.com 僅對 example.com 生效。

        • www.example.com 僅對 www.example.com 生效。

      • 萬用字元網域名稱:僅對其一級子網域名稱生效。

        • *.example.com 對 www.example.coma.example.com 等一級子網域名稱生效。

        • *.example.com 對根網域名稱 example.com 和多級子網域名稱 a.b.example.com 不生效。

      說明

      如需匹配多級子網域名稱,綁定網域名稱中需包含該網域名稱(如 a.b.example.com),或包含相應的萬用字元網域名稱(如 *.b.example.com)。

  2. 在目標認證操作列單擊更多進入認證詳情頁面,然後在下載頁簽中下載伺服器類型其他的認證。

  3. 解壓下載的認證壓縮包:

    • 若同時包含認證檔案(.pem)和私密金鑰檔案(.key),請妥善儲存上述檔案,後續部署時均需使用。

    • 若僅包含認證檔案(.pem),不含私密金鑰檔案(.key),需配合您本地儲存的私密金鑰檔案一起部署。

      說明

      若申請認證時使用 OpenSSL、Keytool 等工具產生 CSR 檔案,私密金鑰檔案僅儲存在您本地,下載的認證包中不包含私密金鑰。如私密金鑰遺失,認證將無法使用,需重新購買正式認證並產生CSR和私密金鑰。

步驟二:在GlassFish伺服器安裝認證

  1. 登入 Linux 伺服器。

    後續部分命令因作業系統類型不同而略有差異。請根據實際的伺服器作業系統,選擇對應的命令操作。

    • RHEL/CentOS 系列:包括 Alibaba Cloud Linux、Red Hat Enterprise Linux、CentOS、AlmaLinux、Rocky Linux、Anolis OS 及其衍生版本。

    • Debian/Ubuntu 系列:包括 Debian、Ubuntu 及其衍生版本。

    如何確認作業系統所屬系列

    在伺服器終端執行 cat /etc/os-release,根據輸出的 ID_LIKEID 判斷:

    • 若 ID_LIKE 或 ID 包含 rhel 或 centos,作業系統屬於 RHEL/CentOS 系列。

    • 若 ID_LIKE 或 ID 包含 debian 或 ubuntu,作業系統屬於 Debian/Ubuntu 系列。

  2. 開放安全性群組和防火牆的 443 連接埠。

    1. 在伺服器終端執行以下命令,檢測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連接埠。

    2. 在安全性群組配置開放443連接埠。

      請確保安全性群組已開放 443 連接埠 (TCP),否則外部無法訪問服務。以下操作以阿里雲 ECS 為例:

      1. 進入Elastic Compute Service執行個體頁面,選擇目標 ECS 執行個體所在地區,單擊目標執行個體名稱,進入執行個體詳情頁。

      2. 單擊內網入方向全部規則,確儲存在一條授權對象允許授權對象TCP授權對象HTTPS(443)授權對象任何位置(0.0.0.0/0)(或其它地址,確保 PC 可遠端存取即可)的規則。

      3. 如不存在上述規則,請參照添加安全性群組規則在目標安全性群組中添加相應規則。

    3. 在防火牆中開放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,則無需進一步操作。否則,請根據輸出的類型(firewalldufwnftablesiptables),執行以下命令開放 443 連接埠:

      firewalld

      sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reload

      ufw

      sudo ufw allow 443/tcp

      nftables

      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/null

      iptables

      sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

      為避免 iptables 規則在系統重啟後失效,請執行以下命令持久化 iptables 規則:

      RHEL/CentOS
      sudo yum install -y iptables-services
      sudo service iptables save
      Debian/Ubuntu
      sudo apt-get install -y iptables-persistent
      sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null
  3. 建立認證存放目錄。

    進入 GlassFish 安裝目錄(本文以 /home/glassfish4 為例),建立名為 cert 的目錄並進入該目錄。

    cd /home/glassfish4
    mkdir cert
    cd cert
  4. 上傳認證與私密金鑰檔案至cert目錄。

    說明

    您可以使用遠程登入工具的本地檔案上傳功能來上傳檔案。例如PuTTYXshellWinSCP等工具。如果您使用的是阿里雲Elastic Compute Service,關於上傳檔案的具體操作,請參見上傳或下載檔案

  5. 轉換認證格式(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),可避免後續配置問題。若設定為其他密碼,後續需進行密鑰條目密碼同步化。

  6. 停止 GlassFish 服務。

    在修改密鑰庫與配置前停止服務:

    /home/glassfish4/glassfish/bin/asadmin stop-domain domain1
  7. 備份密鑰庫與設定檔。

    為防止配置錯誤導致無法啟動,請備份 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
  8. 移除預設認證別名。

    GlassFish 預設使用別名 s1as 進行 SSL 通訊。需先從密鑰庫中刪除該預設條目,以便後續替換。

    keytool -delete -alias s1as -keystore /home/glassfish4/glassfish/domains/domain1/config/keystore.jks

    執行命令時需輸入密鑰庫 keystore.jks 的密碼(預設為 changeit)。

  9. 匯入新認證到密鑰庫。

    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 的密碼>
  10. 修改連接埠配置。

    編輯 /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>
  11. 啟動 GlassFish 服務。

    cd /home/glassfish4/glassfish/bin
    sudo ./asadmin start-domain domain1

步驟三:驗證SSL認證是否安裝成功

  1. 請通過 HTTPS 訪問您已綁定認證的網域名稱(如 https://example.comexample.com 需替換為實際網域名稱)。

  2. 若瀏覽器地址欄顯示安全鎖表徵圖,說明認證已成功部署。如訪問異常或未顯示安全鎖,請先清除瀏覽器緩衝或使用無痕(隱私)模式重試。

    image

    Chrome 瀏覽器自 117 版本起,地址欄中的image已被新的image替代,需單擊該表徵圖後查看安全鎖資訊。

說明

如仍有問題,請參考常見問題進行排查。

常見問題

安裝或更新認證後,認證未生效或 HTTPS 無法訪問

常見原因如下:

如何更新(替換)GlassFish 中已安裝的 SSL 憑證

請先備份伺服器上原有的認證檔案(.pem 和 .key),然後登入數位憑證管理服務控制台,下載新的認證檔案,並上傳到目標伺服器覆蓋原有檔案(確保路徑和檔案名稱一致)。最後,重啟GlassFish服務,使新認證生效。