我一直在尝试使用使用Glassfish的应用程序来帮助我们的某个网站时收到错误消息。登录应用程序时,会引发以下错误:
CommunicationException:发出HTTP请求时发生错误。这可能是由于服务器证书在客户端和服务器之间没有configured properly with HTTP.SYS in the HTTPS case. This could also be caused by a mismatch of the
安全绑定这一事实。
在Server.log中,显示以下内容:
0400 | SEVERE | glassfish3.1 | com.sun.grizzly.config.GrizzlyServiceListener | _ThreadID = 287; _TreadName = Thread-1; |无法加载带路径C的密钥库类型JKS:\ glassfishv3 \ glassfish \ domains \ domain1 / key / keystore.jks由于Keystore被篡改,或密码不正确 java.io.IOException:密钥库被篡改,或密码不正确
该网站在更改glassfish主密码时才遇到此问题。当主密码保留为默认设置时,一切正常。默认主密码为" changeit"。
此外,该网站还会生成并导入用于glassfish的证书。以下是按顺序执行以生成证书和更改密码的步骤:
停止Glassfish服务。
已打开MMC.MSC:操作 - >所有任务 - >申请新证书
从“证书注册”向导中,选择“计算机类型”证书。单击“属性”按钮并配置证书。它得到一个友好的名字" s1as"密钥大小为2048的可导出私钥。私钥导出为pfx文件,证书导出为cer文件。这些文件保存在glassfish配置文件夹中。如果需要,可以提供有关此流程的详细信息。
打开DOS提示符,此命令在glassfish配置文件夹中运行: keytool -delete -alias s1as -keystore keystore.jks -storepass changeit
执行以下命令: keytool -import -v -trustcacerts -alias -file root.cer -keystore cacerts.jks -storepass changeit
回答" Y"信任证书。
输入密码,之后会出现成功消息,表明已成功导入1个条目。
产生了大量输出,包括一个长别名。在下一个命令中使用了长别名。
运行以下命令: keytool -changealias -alias"" -destalias" s1as" -keypass changeit -keystore keystore.jks -storepass changeit
在asadmin中运行以下命令: change-master-password --savemasterpassword = true 输入当前密码" changeit" 输入新密码123456 重新输入123456。 主密码成功更改的成功消息。
在我的本地测试中,此过程已经起作用,我可以使用该应用程序而没有错误。但是在我帮助的网站上,当他们按照相同的流程进行操作时,他们会收到我在此邮件顶部列出的错误。
我的具体问题:
网站的证书是否会导致此问题?如果是这样,有没有办法可以测试证书是否存在问题?
还有哪些其他因素可能会产生错误?可以"更改主密码"命令没有正确更改密码,还是还有其他东西需要更改密码?
答案 0 :(得分:6)
我找到了解决方法,如果将来有人遇到我遇到的同样的问题,我会在这里发布。希望有一天这会让人感到非常沮丧。
在domain.xml中,需要在jvm-options区域中添加以下两行。
<jvm-options>-Djavax.net.ssl.keyStorePassword=[password]</jvm-options>
<jvm-options>-Djavax.net.ssl.trustStorePassword=[password]</jvm-options>