调用JAX-RS Web服务时出现CertificateException

时间:2016-03-09 04:43:15

标签: 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证书的密钥库文件。

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

可能出现什么问题?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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