Glassfish 4.1.1 - 使用我自己的证书的 DAS 抛出 "j_security_check" 错误

Glassfish 4.1.1 - DAS with my own certificate throws "j_security_check" error

我有一个 glassfish 4.1.1 实例 运行 并且我将自己的证书添加到我的应用程序中,直到那时一切正常..

但是,当我尝试访问 glassfish admin(DAS) 时,连接不受信任,添加异常的按钮消失了。

然后我发现了一些有趣的链接,比如:

我试过这个:

asadmin enable-secure-admin --adminalias=myNewAlias --instancealias myNewAlias
asadmin restart-domain domain1

这样不受信任的连接消息就会消失并且证书会正确显示,但是当我尝试身份验证时会抛出错误:

根据 的答案的评论,这与那个人的问题非常相似,但我无法解决:

如何正确更改 s1as 证书?为了我的DAS工作...

我正在使用 Ubuntu 14 和 java-1.8.0-openjdk-amd64。

第一步:

第 2 步:

显示这些行的服务器日志:

[2016-10-18T10:38:12.565+0200] [glassfish 4.1] [SEVERE] [] [org.glassfish.admingui] [tid: _ThreadID=51 _ThreadName=admin-listener(2)] [timeMillis: 1476779892565] [levelValue: 1000] [[ javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; restRequest: endpoint=https://localhost:4848/management/domain/anonymous-user-enabled attrs={} method=GET]]

我终于解决了,为什么会这样?使用@Mike 的解释:

That is because there is both a keystore and a truststore for GlassFish, and the Admin console effectively uses 2-way SSL authentication for the initial login. If you change the s1as certificate, you will also need to change the glassfish-instance certificate

在我的例子中,我试图使用我自己的证书,但我没有正确删除 cacerts.jks 和 keystore.jks 文件上最旧的证书。

我运行在没有首先从文件中删除 s1as 和 glassfish-instance 的情况下使用下面的代码,那是我错误的步骤...

asadmin enable-secure-admin --adminalias=myNewAlias --instancealias myNewAlias

使用您自己的证书到 Glassfish 4.1.1 运行 上的域管理服务器 (DAS),您必须执行以下步骤:

1) 将您自己的证书插入 cacerts.jks 和 keystore.jks 文件:

在我的例子中,我使用的是证书 pkcs12:

keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore keystore.jks -srckeystore myOwnCert.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias myOwnAlias

keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore cacerts.jks -srckeystore myOwnCert.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias myOwnAlias

如果您有其他类型的证书,您必须搜索如何在这两个文件中插入您的证书类型:

$GLASSFISH_HOME/domains/domain1/config/cacerts.jks - truststore - holding all the public keys $GLASSFISH_HOME/domains/domain1/config/keystore.jks - keystore - holding all the private keys

参考文献:

Session 6. 首次启动前的安全配置: https://www.nabisoft.com/tutorials/glassfish/installing-glassfish-41-on-ubuntu

http://peter-butkovic.blogspot.com.es/2013/02/glassfish-default-keystore-and.html

https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html?jn9ed3e997=3

https://glassfish.java.net/docs/4.0/security-guide.pdf

2) 删除最旧的自签名证书:

默认情况下,当您 运行 命令 enabled-secur-admin 分配给此实例的证书是 s1as 并且 public 是 glassfish-instance,正如@Mike 在另一个 中解释的那样,即使您强制 运行 使用另一个证书,证书仍然存在。使用这些命令删除两者:

#Restart your domain without secure-admin
$GLASSFISH_HOME/bin/asadmin disable-secure-admin


#Go to your domain config folder to remove the certificates:
cd $GLASSFISH_HOME/domains/domain1/config/
keytool -delete -alias s1as -keystore keystore.jks -storepass changeit
keytool -delete -alias glassfish-instance -keystore keystore.jks -storepass changeit
keytool -delete -alias glassfish-instance -keystore cacerts.jks -storepass changeit
keytool -delete -alias s1as -keystore cacerts.jks -storepass changeit

参考文献:

谢谢@Mike:

https://glassfish.java.net/docs/4.0/security-guide.pdf(第 80 页)

3) 使用您在第一步中设置的别名重新启动安全管理员

$GLASSFISH_HOME/bin/asadmin enable-secure-admin --adminalias=myOwnAlias --instancealias myOwnAlias

$GLASSFISH_HOME/bin/asadmin restart-domain

理论上已经搞定了,你就可以用自己的证书访问DAS了...;)