本文介绍如何在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 为例:
在防火墙中开放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等工具。如果您使用的是阿里云云服务器 ECS,关于上传文件的具体操作,请参见上传或下载文件。
转换证书格式(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服务,使新证书生效。