TLS クライアント認証を使用するサーバーにリクエストを送信する必要があります。そのために、証明書と秘密鍵を使用して PKCS12 ファイルを作成し、それを SSLContext に KeyManager として設定しました。
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystoreInputStream = new FileInputStream("C:/Users/PC/Desktop/certprivate.p12");
keystore.load(keystoreInputStream, "password".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keystore, "password".toCharArray());
SSLContext sc = SSLContext.getInstance("TLSv1.3");
sc.init(kmf.getKeyManagers(), null, null);
また、キーツールを使用してサーバーから証明書をcacerts
ストアに追加しましたが、それは機能しませんでしたが、InstallCerts を使用してすべての中間証明書をダウンロードし、それらを cacerts にインストールしました。私が今得ている問題は400 No required SSL certificate was sent
.
私の理解では、TrustManager
がnullに設定されている場合、この場合は次のデフォルトのTrustManagerが使用されるため、これが表示される理由はわかりません。
String certificatesTrustStorePath = "C:/Program Files/Java/jdk-15.0.2/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore", certificatesTrustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
編集:TLSハンドシェイクが完了したため、リクエストが失敗する理由がわかりません。そうでなければ、他のエラー/例外が発生したでしょう。