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

时间:2016-10-18 09:20:43

标签: java security ssl https glassfish

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

但是,当我尝试访问glassfish管理员(DAS)时,连接不受信任,添加例外的按钮消失。

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

我试过了:

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

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

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

  • 从~.gfclient / truststore
  • 中删除s1as证书
  • 使用我的新别名证书
  • 重新启动域

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

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

第1步: enter image description here

第2步: enter image description here

显示以下行的服务器日志:

  

[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路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径;   javax.net.ssl.SSLHandshakeException:   sun.security.validator.ValidatorException:PKIX路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径; restRequest:   端点= https://localhost:4848/management/domain/anonymous-user-enabled   attrs = {} method = GET]]

1 个答案:

答案 0 :(得分:4)

我终于解决了它,为什么会发生这种情况?使用@Mike解释:

  

这是因为有一个密钥库和一个信任库   GlassFish和管理控制台有效地使用双向SSL   初始登录的身份验证。如果你改变了s1as   证书,您还需要更改glassfish-instance   证书

在我的情况下,我尝试使用自己的证书,但我没有在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 -   持有所有公钥       $ GLASSFISH_HOME / domains / domain1 / config / keystore.jks - keystore - 持有所有私钥

参考文献:

会话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 ,公众为 glassfish-instance ,如@所述。即使你强行与其他证书一起运行,迈克也会继续留下stack-overflow question个证书。使用以下命令删除两者:

#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:Right way to configure Glassfish SSL certificate nickname?

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

3)在第一步使用您自己的别名设置重新启动security-admin

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

$GLASSFISH_HOME/bin/asadmin restart-domain

从理论上讲,它已经完成,您可以使用自己的证书访问DAS ......;)