Java11のHttpClientを使って、クライアント認証をする方法を紹介

こんにちは。ぐっさんです。
 
サーバー通信をする際に使用されるHttpClientで、クライアント認証する必要がでてきました。その際に証明書を設定する方法をご紹介します。

今回の環境

今回の環境は、Java11を使用しています。

Java
11

まずは、SSLContextを生成

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;
}

生成したSSLContextをHttpClientで設定

// 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();

まとめ

一度、作成してしまえば終わることですが、始めは悩むところだと思いますので、参考になればうれしいです。
 
 
 
 
《関連記事》

記事をシェア
MOST VIEWED ARTICLES