java - 调用 JAX-RS Web 服务时发生 CertificateException

标签 java web-services ssl jax-rs weblogic12c

我有一个在 WebLogic 12.2.1 中运行的 JAX-RS Web 服务。我能够使用浏览器通过 HTTP 和 HTTPS 调用该服务。由于 SSL 证书是自签名的,因此在浏览器中出现提示时我必须信任它。

在测试独立程序中(重要部分如下所示),我还可以使用 HTTP 调用服务,在 URL 中提供服务器的 IP 地址。

ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target(UriBuilder.fromUri("http://XXX.XXX.XXX.XXX:5320/MLM").build());
Invocation.Builder builder = target.path("Services/Init").request();
Response response = builder.get();
String responseBody = response.readEntity(String.class);

但是,当我将客户端代码中的 URL(将端口和 IP 地址更改为主机名)更改为 HTTPS 时,出现以下异常。

Exception in thread "main" javax.ws.rs.ProcessingException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching XXXX.XXXX.XXXX.XXXX found
    at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:287)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:411)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:311)

证书中的通用名称与服务器的主机名相同。我还可以从运行客户端程序的地方 ping 主机名。客户端程序使用以下 JVM 参数运行,我指定了存储 SSL 证书的 keystore 文件。

-Djavax.net.ssl.trustStore=mlm-sit.jks -Djavax.net.ssl.trustStorePassword=xxxxxx

有什么问题吗?

提前致谢。

最佳答案

我已经使用新的通用名称为服务器创建了一个新的 keystore ,但我没有重新启动服务器。所以发生的事情是使用了旧的 Common 名称,它与服务器的实际主机名不匹配。我只需要重新启动服务器,问题就解决了。

关于java - 调用 JAX-RS Web 服务时发生 CertificateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35883049/

相关文章:

java - Sonar Java Web客户端: Authors by line null

azure - 如何从 Azure 导入证书?

java - 我如何通过 Jena 向我的 Ontology 添加一些三元组?

java - 我应该在 Windows java 应用程序上使用 android sdk

javascript - 点击用js删除div

perl - 使用 SOAP 和 Perl 调用带参数的函数

Python请求SSL错误-证书验证失败

sql-server - 检查 SQL Server SSL 服务器身份验证证书何时过期

java - Apache Ignite 异常 : Caches have distinct sets of data nodes

java - 主线程和单个长时间运行的线程之间的线程安全双向通信