我有一个glassfish 4.1.1运行实例,我将自己的证书添加到我的应用程序中,直到那时一切正常..
但是,当我尝试访问glassfish管理员(DAS)时,连接不受信任,添加例外的按钮消失。
然后我发现了一些有趣的链接,比如:
我试过了:
asadmin enable-secure-admin --adminalias=myNewAlias --instancealias myNewAlias
asadmin restart-domain domain1
这样,不受信任的连接消息就会消失并且证书正确显示,但是当我尝试身份验证时会抛出错误:
根据link答案的评论,它与那个家伙的答案非常相似,但我无法解决这个问题:
如何正确更改s1as证书?为了我的DAS工作......
我正在使用Ubuntu 14和java-1.8.0-openjdk-amd64。
显示以下行的服务器日志:
[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]]
答案 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 ......;)