全部产品
Search
文档中心

数字证书管理服务:在GlassFish服务器安装SSL证书(Linux)

更新时间:Mar 03, 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 服务器。

    • 阿里云服务器:请参考使用Workbench登录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. 进入云服务器ECS实例页面,选择目标 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等工具。如果您使用的是阿里云云服务器 ECS,关于上传文件的具体操作,请参见上传或下载文件

  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服务,使新证书生效。