お知らせ
2023.12.5(Tue)
目次
こんにちは。ぐっさんです。
サーバー通信をする際に使用されるHttpClientで、クライアント認証する必要がでてきました。その際に証明書を設定する方法をご紹介します。
今回の環境は、Java11を使用しています。
SSLContextの作成では、JKSファイルのファイルパスとパスワードでSSLContextを生成します。
private static SSLContext getSSLSocketFactory(String keyPath, String pass)
throws FileNotFoundException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException,
CertificateException, IOException, UnrecoverableKeyException {
// 自己署名証明書でも OK とする。
//TrustStrategy trustStrategy = new TrustSelfSignedStrategy();
//return SSLContexts.custom().loadTrustMaterial(trustStrategy).build();
// KeyStore
KeyStore clientStore = KeyStore.getInstance("jks");
// 指定された入力ストリームからこのキーストアをロード
FileInputStream keyFileStream = new FileInputStream(keyPath);
clientStore.load(keyFileStream, pass.toCharArray());
keyFileStream.close();
// KeyManager
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(clientStore, pass.toCharArray());
// 鍵データの種類ごとに 1 つの鍵マネージャーを取得
KeyManager[] kms = kmf.getKeyManagers();
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(kms, null, new SecureRandom());
return sslContext;
}
// Create HttpClient<img src="https://amg-official.s3.ap-northeast-1.amazonaws.com/wp-content/uploads/2021/12/11215119/20220711-300x216.jpg" alt="" width="300" height="216" class="alignnone size-medium wp-image-29506" /> HttpClient httpClient = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_1_1) .sslContext(getSSLSocketFactory(keystorePath, keystorePass)) .build();
一度、作成してしまえば終わることですが、始めは悩むところだと思いますので、参考になればうれしいです。
《関連記事》