RESTeasy客户端是否支持TLS/SSL?

4

我正在使用基于JAVA的Web应用程序中的几个RESTful Web服务。我正在使用RESTeasy客户端访问我的Web服务。这里客户端和服务之间的所有通信都是通过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);

当我尝试访问我的服务时,出现“对等体未经身份验证”错误。

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

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

如果他们看到你从来没有接受过一个答案,人们往往不会回答你的问题。这是需要记在心里的事情。(不,我不知道答案) - gresdiplitude
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"问题。希望有所帮助。赞赏。

请注意,这是一个证书而不仅仅是 pem 格式的密钥对:openssl x509 -outform der -in certificate.pem -out certificate.der - raf

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);`

然后将其附加到RestEasy Builder中

resteasyClientBuilder.sslContext(sslContext)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接