2017-07-22 5 views
0

HTTPで実行されているレストサービスを使用する必要があります。プロデューサーは私に証明書とメソッドの引数を与えました。サービスを利用する方法とコードで証明書を使用する方法を教えてください。私はSpring 4、Java 8を使用しています。コードスニペットを共有してください。HTTPs(および証明書)を使用してJava/Spring Restサービスを使用する

+0

春休みテンプレートを使用できます。 [この回答はあなたを助けることができます](https://stackoverflow.com/questions/17619871/access-https-rest-service-using-spring-resttemplate)そこのコードスニペットを見て、必要。 – andreybleme

答えて

0

を使用してHTTPSでRESTfulなサービスにアクセスするための怒鳴るリンクを参照することができますサービスによって提供された証明書(プロデューサ証明書)を信頼ストア(CACertsファイル)にインポートするか、独自のトラストマネージャを作成する必要があります。

サービスでもクライアントのIDを認証する2ウェイSSLの場合、サービスのIDを検証するだけでなく、証明書をサービスに送信してサービスで決定できるようにする必要があります。

次のスニペットは2ウェイSSLのためのものですが、クライアント証明書をサーバーに送信する部分をコメントアウトすることで、一方向SSLに簡単に採用できます。

// Create a trust manager that does not validate certificate chains 
    TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){ 
     public X509Certificate[] getAcceptedIssuers(){return null;} 
     public void checkClientTrusted(X509Certificate[] certs, String authType){} 
     public void checkServerTrusted(X509Certificate[] certs, String authType){} 
    }}; 

    // Install the all-trusting trust manager 
    RestTemplate restTemplate = new RestTemplate(); 

    try { 

     String keyPassphrase = "changeit"; 

     KeyStore keyStore = KeyStore.getInstance("jks"); 
     keyStore.load(new FileInputStream("c:\\jks\\client.jks"), keyPassphrase.toCharArray()); 

     KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());   
     kmfactory.init(keyStore, keyPassphrase.toCharArray()); 

     KeyManager[] keyManager = kmfactory.getKeyManagers(); 

     SSLContext sc = SSLContext.getInstance("TLS"); 

     sc.init(keyManager, trustAllCerts, new SecureRandom()); 

     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 

     HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier(){ 

      public boolean verify(String hostname, 
        javax.net.ssl.SSLSession sslSession) { 
       if (hostname.equals("localhost")) { 
        return true; 
       } 
       return false; 
      } 
     }); 

    } catch (Exception e) { 
     ; 
    }  




    System.out.println("Testing listAllUsers API-----------"); 


    restTemplate.setErrorHandler(new ResponseErrorHandler(){ 

     @Override 
     public void handleError(ClientHttpResponse rs) throws IOException { 
      InputStream in = rs.getBody(); 
      String str = new String(""); 
      int len =0; 
      while((len = in.available()) > 0){ 
       byte[] bytes = new byte[len]; 
       in.read(bytes); 
       str = str + new String (bytes, "UTF-8"); 

      } 

      System.out.println(str); 

     } 

     @Override 
     public boolean hasError(ClientHttpResponse rs) throws IOException { 

      return false; 
     } 

    }); 
    try{ 

    String usersMap = restTemplate.getForObject(REST_SERVICE_URI+"/user/shailendra/", String.class);` 
関連する問題