【问题标题】:Does RESTeasy client support TLS/SSL?RESTeasy 客户端是否支持 TLS/SSL?
【发布时间】:2012-07-23 16:00:07
【问题描述】:

我在基于 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 配置细节?也欢迎任何其他解决此问题的建议

提前致谢

【问题讨论】:

  • 如果人们看到您从未接受过答案,他们往往不会回答您的问题,请记住(不,我不知道答案)

标签: rest ssl https resteasy


【解决方案1】:

我找到了答案,但很抱歉回复晚了。

为了回答我的问题,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
【解决方案2】:

如果您不想将证书添加到 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-18
    • 2023-02-04
    • 2018-09-22
    • 1970-01-01
    • 2021-02-08
    • 2017-09-08
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多