gpt4 book ai didi

java - Web 服务无法在 GlassFish 服务器上运行

转载 作者:搜寻专家 更新时间:2023-11-01 03:55:32 25 4
gpt4 key购买 nike

我用 Java 创建了一个 Web 服务,它将数据发布到另一个 Web 服务。这需要 SSL 证书进行身份验证。此 Web 服务在 Tomcat 上运行良好,但当我在 GlassFish 3.0.1 服务器上部署相同的代码时,我收到 javax.net.ssl.SSLHandshakeException: Received fatal alert: unknown ca exception。我已使用 keytool 将证书导入到 glassfish trustStore。所需证书由客户提供。

我的代码:

System.setProperty("javax.net.ssl.keyStoreType" , "pkcs12");
System.setProperty("javax.net.ssl.keyStore", applicationRootDirPath + "clientCert.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "password");

System.setProperty("javax.net.ssl.trustStoreType", "jks");
System.setProperty("javax.net.ssl.trustStore", "path of glass fish truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

try {
url = new URL(serverUrl);
urlConn = url.openConnection();
urlConn.setDoOutput(true);
urlConn.setRequestMethod("POST");
urlConn.setAllowUserInteraction(false);
urlConn.setUseCaches(false);
urlConn.setRequestProperty("Content-type", "text/xml; charset=utf-8");
urlConn.setRequestProperty("Content-Length", new Integer(xml.length()).toString());

try {
writer = new OutputStreamWriter(urlConn.getOutputStream(), "UTF-8");
writer.write(xmlData);
} finally {
if (writer != null) {
writer.close();
}
}
trace += "\n urlConn.getInputStream()";
in = urlConn.getInputStream();
}

最佳答案

您使用的开发环境是什么?如果您使用的是 NetBeans,则必须在 /etc/netbeans.conf 的 VMargs 中设置这些(这是正确的 Web 服务工具功能所必需的,以便您可以生成客户端):

<NETBEANS_HOME>/bin/netbeans.exe
-J-Djavax.net.ssl.trustStore=<AS_HOME>/domains/domain1/config/cacerts.jks
-J-Djavax.net.ssl.keyStore=<AS_HOME>/domains/domain1/config/keystore.jks
-J-Djavax.net.ssl.trustStorePassword=changeit
-J-Djavax.net.ssl.keyStorePassword=changeit

此外,请确保您已在 GlassFish 中正确设置信任库;将这些行完全像这样添加到 JVM 选项中:

-Djavax.net.ssl.trustStore=${truststore.location}
-Djavax.net.ssl.trustStorePassword=${ssl.password}

此外,如果它不是有效证书(例如主机名不匹配,这是 javax.net.ssl.SSLHandshakeException 的常见原因),您可以在客户端网络中执行解决方法用于开发/测试目的的服务:

static {
//WORKAROUND. TO BE REMOVED.
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){
public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
if (hostname.equals("mytargethostname")) { //Change to actual value
return true;
}
return false;
}
});
}

目前我看不出你的问题的根源,但我认为这些是你应该解决的问题。

关于java - Web 服务无法在 GlassFish 服务器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com