私は現在、次のcurlコマンドを使用してクライアント証明書を必要とするWebサービスにアクセスできるようにしていますhttps://api.com/unitは
このリクエストをJavaアプリケーションで作成するにはどうすればよいですか?
curlに「安全でない」SSL接続を許可する-kフラグが必要であることに注意してください。これは、Javaアプリケーションでも同様に行う必要があります。
私は現在、次のcurlコマンドを使用してクライアント証明書を必要とするWebサービスにアクセスできるようにしていますhttps://api.com/unitは
このリクエストをJavaアプリケーションで作成するにはどうすればよいですか?
curlに「安全でない」SSL接続を許可する-kフラグが必要であることに注意してください。これは、Javaアプリケーションでも同様に行う必要があります。
この問題の最終的な解決策は、サーバー証明書を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 "
以下のコードは、クライアント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;
}
}
、私は、次の質問/答えを見てすることを勧めます。
以下の回答は、あなたの問題を解決しますか? – veebee
@veebe no。私は問題に私の最終的な解決策を追加しています。 –