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
这样不受信任的连接消息就会消失并且证书会正确显示,但是当我尝试身份验证时会抛出错误:
根据 的答案的评论,这与那个人的问题非常相似,但我无法解决:
- 正在从 ~.gfclient/truststore
中删除 s1as 证书
- 使用我的新别名证书重新启动域
如何正确更改 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了...;)
我有一个 glassfish 4.1.1 实例 运行 并且我将自己的证书添加到我的应用程序中,直到那时一切正常..
但是,当我尝试访问 glassfish admin(DAS) 时,连接不受信任,添加异常的按钮消失了。
然后我发现了一些有趣的链接,比如:
我试过这个:
asadmin enable-secure-admin --adminalias=myNewAlias --instancealias myNewAlias
asadmin restart-domain domain1
这样不受信任的连接消息就会消失并且证书会正确显示,但是当我尝试身份验证时会抛出错误:
根据
- 正在从 ~.gfclient/truststore 中删除 s1as 证书
- 使用我的新别名证书重新启动域
如何正确更改 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了...;)