Glassfish v4 和 SSL - 管理员不再工作

Glassfish v4 & SSL - admin no longer works

我已经完成了将 SSL 证书添加到 glassfish v4 的步骤。我已经验证它可以通过浏览器和我的 java swing 客户端(我在客户端使用 apache 的 http 客户端库)

管理控制台不起作用!自从成功导入 SSL 后,我无法再连接到管理控制台,http://www.myhost.com:4848,我仍然看到登录屏幕,一直有效的管理 username/password 组合已停止工作。我在尝试从 netbeans 部署 Web 应用程序时也注意到了一些问题,但我还没有足够的研究来知道它是否是同一个问题。

以下是我添加 ssl 证书所采取的步骤。这些是直接从 glassfish v4 安全指南 p1-26 到 p1-29 中提取的。我确实添加了一个步骤来更改主密码,但我应该早点做,但我把它包括在这里。为了我的隐私,我还在下面的步骤中省略或更改了某些文件夹名称,但除此之外,我已经从终端应用程序中复制了所有这些。

有人知道管理员出了什么问题吗?需要注意的一件事 - 按照 glassfish 的管理和安全指南说我可以改写 s1as 别名。您会注意到我在以下步骤中使用证书时使用了该别名

在此先感谢您的帮助!

步骤 1 - 停止服务器

/usr/home/myhost                                                                                                                                                                                                                                           
110 % glassfish4/bin/asadmin stop-domain domain1
Waiting for the domain to stop .
Command stop-domain executed successfully.

步骤 2 - 更新主密码

/usr/home/myhost
110 % glassfish4/bin/asadmin
Use "exit" to exit and "help" for online help.
asadmin> change-master-password domain1
Enter the current master password>
Enter the new master password>
Enter the new master password again>
Command change-master-password executed successfully.
asadmin> exit
Command multimode executed successfully.

步骤 3 - 切换到密钥文件目录

/usr/home/myhost
111 % cd glassfish4/glassfish/domains/domain1/config/

步骤 4 - 从密钥库中删除 s1as

/usr/home/myhost/glassfish4/glassfish/domains/domain1/config
113 % keytool -delete -alias s1as -keystore keystore.jks
Enter keystore password:

步骤 5 - 生成新的密钥对

/usr/home/myhost/glassfish4/glassfish/domains/domain1/config
114 % keytool -genkey -alias s1as -keyalg RSA -keystore keystore.jks -keysize 2048
Enter keystore password:
What is your first and last name?
[Unknown]:  www.myhost-dev.com
What is the name of your organizational unit?
[Unknown]:  development
What is the name of your organization?
[Unknown]:  myhost, inc
What is the name of your City or Locality?
[Unknown]:  mycity
What is the name of your State or Province?
[Unknown]:  mystate
What is the two-letter country code for this unit?
[Unknown]:  us
Is CN=www.myhost-dev.com, OU=development, O="myhost, inc", L=mycity, ST=mystate, C=us correct?
Enter key password for <s1as>
(RETURN if same as keystore password): 

步骤 6 - 生成证书签名请求 (CSR)

/usr/home/myhost/glassfish4/glassfish/domains/domain1/config
115 % keytool -certreq -alias s1as -file toSymantec02.csr -keystore keystore.jks
Enter keystore password: 

步骤 7 - 将 CSR 提交给赛门铁克

步骤 8 - 将中间证书和 ssl 证书从 symantec 复制到配置目录中

步骤 9 - 导入中间证书

/usr/home/myhost/glassfish4/glassfish/domains/domain1/config
115 % keytool -import -trustcacerts -alias Intermediate -keystore keystore.jks -file IntermediateCA.crt
Enter keystore password:
Certificate was added to keystore

步骤 10 - 导入 ssl 证书

/usr/home/myhost/glassfish4/glassfish/domains/domain1/config
116 % keytool -import -trustcacerts -alias s1as -keystore keystore.jks -file ssl_certificate.crt
Enter keystore password:
Certificate reply was installed in keystore

步骤 11 - 重启服务器

/usr/home/myhost
118 % glassfish4/bin/asadmin start-domain domain1
Enter master password (3) attempt(s) remain)>
Waiting for domain1 to start ...............................
Successfully started the domain : domain1
domain  Location: /usr/home/myhost/glassfish4/glassfish/domains/domain1
Log File:/usr/home/myhost/glassfish4/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.

问题几乎可以肯定是 s1as 证书的专有名称 (DN) 已更改,但安全管理主体尚未更新。

有一个 asadmin 命令 (enable-secure-admin-principal) 允许您手动更新它,但您也可以再次 运行 enable-secure-admin(即使安全管理已经启用) .此命令将调用与前一个相同的代码,并将安全管理主体替换为来自管理员证书别名 (s1as) 的正确主体。

然后您将需要重新启动 GlassFish 以使更改生效,但您随后将能够登录到管理控制台。

根本原因是管理控制台本质上是在执行 2-way SSL 和你的登录,所以你的用户名和密码是为你验证的,管理员用户,然后管理控制台本身用 DN 作为用户 ID,s1as 密钥作为密码。这是因为管理控制台通过 REST 与 DAS 通信,并且需要将自己标识为受信任的客户端。


希望所有背景知识对您有所帮助,但 TL;DR 如下:

  1. 运行 enable-secure-admin 再一次
  2. 重新启动域

非常感谢@cotfessi 和@Mike,你们的 post 真的帮助我在 Glassfish 4.1 中安装了 SSL 证书...非常感谢!

我只想添加一些我必须执行的额外步骤,这些是:

第 10 步之后 - 导入 ssl 证书

  • 从 keystore.jks
  • 导出别名 s1as

keytool -export -alias s1as -file server.cer -keystore keystore.jks

  • 从 cacerts.jks
  • 中删除别名 s1as

keytool -delete -alias s1as -keystore cacerts.jks

  • 使用 server.cer
  • 将别名 s1as 导入到 cacerts.jks

keytool -import -v -trustcacerts -alias s1as -keystore cacerts.jks -file server.cer

稍后继续步骤 11 - 重新启动服务器


我还想添加一些可能对在 GoDaddy 中购买 SSL 证书的人有用的信息...

  • 好吧,我在 GoDaddy 购买了 SSL,我必须按照@cotfessi 在第 6 步第 7 步[=中的描述,将我的 (CSR) 发送给他们42=],所以我收到并通过电子邮件发送了一些有关下载带有证书的 zip 的说明,所以当我去下载它时,我发现他们有一个列表选项,其形式为 Server type 它有多个选项,如 Apache、Tomcat、IIS... 和其他,所以我选择了 other 选项并下载了 zip,当我解压它时我注意到有 2 个文件,一个名为 4a0BlaBlaBlaBla8.crt(Bla 仅用于示例目的),其中仅包含一个带有 ---BEGIN/END CERTIFICATE--- 和另一个名字像 gd_bundle-g2-g1.crt,包含 3 ---BEGIN/END CERTIFICATE--- 部分,所以我使用 4a0BlaBlaBlaBla8.crt 作为我的 ssl_certificate.crt gd_bundle-g2-g1.crt 作为我的 IntermediateCA.crt。我想分享这个,因为它可能会让 GoDaddy 用户有点困惑(我认为...)

我还想推荐这个 post,它帮助我将我的 HTTP 流量重定向到 HTTPS,而无需对 Glassfish(仅对我的网络应用程序)进行额外配置: