2017-02-23 10 views
0

RESTfulなWebサービスを呼び出すための簡単なJavaプログラムを作成しています。SSL認証用に.cerファイルが提供されています。JavaでSSL認証にcertファイルを使用する

.cerファイルをjavaのSSLハンドシェイクで使用する方法がわかりません。そのため、Webサービスを呼び出すときにSSL Handshake errorが返されます。

ここで私を案内してください。 ありがとうございます。

答えて

-1

ハンドシェイクを無効にすることができます。十分ではありません

private static void sslTest(String serviceUrl, String username, String password) throws Exception { 
     System.setProperty("jsse.enableSNIExtension", "false"); 

     CredentialsProvider provider = new BasicCredentialsProvider(); 
     provider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password)); 

     SSLContext sslContext = SSLContexts.custom() 
       .loadTrustMaterial(null, new TrustStrategy() { 

        @Override 
        public boolean isTrusted(final X509Certificate[] chain, final String authType) throws CertificateException { 
         return true; 
        } 
       }) 
       .useTLS() 
       .build(); 

     SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); 
     CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).setSSLSocketFactory(sslsf).build(); 

     String content = ""; 


     try { 
      HttpResponse response = client.execute(new HttpGet(serviceUrl)); 
      if (Integer.toString(response.getStatusLine().getStatusCode()).equalsIgnoreCase("200")) { 
       HttpEntity entity = response.getEntity(); 
       content = EntityUtils.toString(entity); 
       System.out.println(content); 
      } 
     } catch (Exception e) { 
      logger.error("Exception : {}", e.getMessage()); 
     } 
    } 
+0

この安全でないコードは、TLSハンドシェイクを無効にしません。ハンドシェイク中に受信した証明書のチェックが無効になります。質問に答えず、安全に使用することはできません。 – EJP

+0

私はjeresy rest clientですが、上記のコードは動作しません。 –

0

I have been provided with a .cer file for SSL authentication.

:ここでは、テストコードです。

秘密鍵を持っている必要があります。秘密鍵は自分自身で作成されていて、与えられていない必要があります。証明書署名要求(CSR)を発行し、認証局(CA)によって署名されています。

これを使用して自分自身をJavaで認証するには、秘密鍵と証明書の両方が同じエイリアスのキーストアに存在する必要があり、システムプロパティjavax.net.ssl.keyStorejavax.net.ssl.keyStorePasswordでキーストアとそのパスワードを提供する必要があります。それ以外の場合は、JSSEリファレンスガイドに記載されているより複雑なコードメソッドを使用してください。

+0

はい.cerファイルからJKSを生成するために、以下のコマンドを使用しました。 "keytool -importcert-file" exxon-devca-client.cer "-keystore exxon-devca-client.jks -alias" exxon-devca-client "" また、私のjeresy restクライアントコードに以下の行を追加しました。 ファイルresourcesDirectory = new File(System.getProperty( "user.dir")+ "" /resources/exxon-devca-client.jks "); \t \t System.setProperty( "javax.net.ssl.keyStore"、resourcesDirectory.getAbsolutePath()); \t \t System.setProperty( "javax.net.ssl.keyStorePassword"、 "password"); しかし私は以下のエラーを受け取ります: javax.net.ssl.SSLHandshakeException:致命的なアラートを受信しました:bad_certificate –

+0

私は繰り返すことができます。あなたは秘密鍵で* started *を持っていなければなりません。そのためにはJKSファイルで始める必要があります。 .cerファイルから新しいJKSファイルを生成することは問題ありません。同じエイリアスを使用して、CSRを生成したキーストアにインポートする必要があります。注意事項コメントにコンピュータコマンドや出力、コードを投稿しないでください。あなたはそれが完全に判読不能であることが分かります。 – EJP

関連する問題