4

我在基于 JAVA 的 Web 应用程序中使用了几个 RESTful Web 服务。我正在使用 RESTeasy 客户端访问我的网络服务。这里客户端和服务之间的所有通信都是通过 XML(JAX-B xml 带注释的详细信息类)。以下是以下代码

String serviceURL  = "https://service.company.com/Service/getService"

ServiceRequestDetail serviceRequestDetail = getServiceRequestAsDetailClass();
ServiceResponseDetail serviceResponseDetail = new ServiceResponseDetail();
ClientRequest clientRequest = new ClientRequest(serviceURL);
clientRequest.accept(MediaType.APPLICATION_XML);   
clientRequest.body(MediaType.APPLICATION_XML, serviceRequestDetail);
ClientResponse<ServiceRequestDetail> response =
  clientRequest.post(ServiceRequestDetail.class);

if (response.getStatus() != 200) {
  throw new RuntimeException("Failed : HTTP error code : " + 
                             response.getStatus());
}

ServiceResponseDetail serviceResponseDetail =
  response.getEntity(ServiceResponseDetail.class);

当我尝试访问我的服务时,我收到“Peer not Authenticated”错误

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
...

有没有办法在 RESTeasy 客户端中添加 SSL 配置详细信息?也欢迎任何其他解决此问题的建议

提前致谢

4

2 回答 2

4

我找到了答案,但我真的很抱歉迟到的回复。

要回答我的问题,RESTeasy 客户端确实支持 TLS/SSL。事实上,问题是我错过了将证书安装到 JVM 中。

keytool -import -alias <Replace certificate Alias name> -keystore $JAVA_HOME\jre\lib\security\cacerts -file <Replace your Certificate file location>

这解决了“Peer Not Authenticated”的问题。希望能帮助到你。荣誉

于 2013-11-18T11:55:29.190 回答
0

如果您不想将证书添加到 JVM 并将此证书分开。您可以将证书作为代码的一部分加载,如下所示。

    // load the certificate
    InputStream fis = this.getClass().getResourceAsStream("file/path/to/your/certificate.crt");
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    Certificate cert = cf.generateCertificate(fis);

    // load the keystore that includes self-signed cert as a "trusted" entry
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    keyStore.load(null, null);
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    keyStore.setCertificateEntry("cert-alias", cert);
    tmf.init(keyStore);
    SSLContext ctx = SSLContext.getInstance("TLS");
    ctx.init(null, tmf.getTrustManagers(), null);`

然后附上休息容易的建设者,如

resteasyClientBuilder.sslContext(sslContext)

于 2019-08-14T20:36:56.110 回答