2017-11-07 5 views
0

私は現在、次のcurlコマンドを使用してクライアント証明書を必要とするWebサービスにアクセスできるようにしていますhttps://api.com/unit

このリクエストをJavaアプリケーションで作成するにはどうすればよいですか?

curlに「安全でない」SSL接続を許可する-kフラグが必要であることに注意してください。これは、Javaアプリケーションでも同様に行う必要があります。

+0

以下の回答は、あなたの問題を解決しますか? – veebee

+0

@veebe no。私は問題に私の最終的な解決策を追加しています。 –

答えて

0

この問題の最終的な解決策は、サーバー証明書をJavaトラストストアに含めることでした。私は​​

キーストアとトラストストアを使用するサーバー証明書をダウンロードしてインポートするには

は、その後、下記のようなシステムのプロパティで定義された:

-Djavax.net.ssl.keyStore = /ホーム/ wildfly /キーを.pfx -Djavax.net.ssl.keyStorePassword = xxxx -Djavax.net.ssl = trustStore = $ JAVA_HOME/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword = xxxx -Djavax.net.ssl.keyStoreType = PKCS12 "

0

以下のコードは、クライアントSSL認証でHTTP GET要求を送信する「sendSSLRequest」メソッドを提供しています。

import org.apache.http.client.HttpClient; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.client.methods.HttpGet; 

public class SSLExample { 

    private final static String ENDPOINT_URL = "https://api.com/unit"; 

    public void sendSSLRequest() { 

     final SSLContext sslContext = SSLContextLoader.initSSLContext(); 

     final HttpClient client = HttpClients.custom() 
            .setSSLContext(sslContext) 
            .build(); 
     final HttpGet request = new HttpGet(ENDPOINT_URL); 

     try { 
     client.execute(request); 
     } catch (final IOException e) { 
     //do some exception handling... 
     } 
    } 
} 

ここで、SSLContext:あなたはどこかでそれを初期化する必要があります。 以下の「initSSLContext」メソッドは、指定されたキーストアからキーマテリアルをロードし、特定のトラストストアから信頼できるマテリアル(信頼できる証明書)をロードします。 Trusting all certificates using HttpClient over HTTPS:-kオプションについて

public class SSLContextLoader { 

    private final static String clientKeyStorePath = "/path/to/client/keystore"; 
    private final static String trustStorePath = "/path/to/truststore"; 
    private final static String clientKeyStorePassword = "/password/for/client/keystore"; 
    private final static String trustStorePassword = "/password/for/truststore"; 
    private final static String keyPassword = "/passphrase/for/private/key"; 

    public static SSLContext initSSLContext() { 
     try { 
     final KeyStore clientKeystore = KeyStore.getInstance("JKS"); 
     clientKeystore.load(new FileInputStream(clientKeyStorePath), clientKeyStorePassword.toCharArray()); 
     final KeyStore trustStore = KeyStore.getInstance("JKS"); 
     trustStore.load(new FileInputStream(trustStorePath), trustStorePassword.toCharArray()); 

     final SSLContext sslContext = SSLContexts.custom() 
      .loadTrustMaterial(trustStore, null) 
      .loadKeyMaterial(clientKeystore, keyPassword.toCharArray()) 
      .build(); 

     return sslContext; 
     } catch (KeyStoreException e) { 
     e.printStackTrace(); 
     } catch (CertificateException e) { 
     e.printStackTrace(); 
     } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } catch (UnrecoverableKeyException e) { 
     e.printStackTrace(); 
     } catch (KeyManagementException e) { 
     e.printStackTrace(); 
     } 
    return null; 
    } 
} 

、私は、次の質問/答えを見てすることを勧めます。