4

私はJAVAベースのWebアプリケーションでいくつかのRESTfulWebサービスを使用しています。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);

サービスにアクセスしようとすると、「PeernotAuthenticated」エラーが発生します

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>

これにより、「ピアが認証されていない」という問題が解決されました。それが役に立てば幸い。称賛

于 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 に答える