0

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ハンドシェイクが完了したため、リクエストが失敗する理由がわかりません。そうでなければ、他のエラー/例外が発生したでしょう。

4

1 に答える 1