おはようございます。
私の問題は、デフォルトの信頼できる証明書だけでなく、自己署名証明書も受け入れる HttpsURLConnection を作成したいことです。
インターネットで調べてみると、似たような質問がたくさん見つかりましたが、私が求めているものとはまったく異なりました。
特に、優れたコードがここにあります。
これは私が望んでいることとほとんど同じですが、違いがあります。
彼らは自己署名証明書のみを信頼しますが、私は自己署名証明書も信頼したいと考えています。
基本的に、空のキーストアから開始することはしたくありません。デフォルトのキーストアがどこであっても、OS にデフォルトの証明書がすでに含まれているものを取得したいと考えています。
追記: 私は Android で作業しています。
皆さんに感謝します
------------------------
基本的には、デフォルトの信頼できる証明書と独自の信頼できる証明書を使用する必要があります。同様の質問と回答がここにあります: JVM での複数のキーストアの登録
私も同じ問題に遭遇しましたが、Code a Ray の回答が非常に役立つことがわかりました。彼のコード スニペットを複数のプロジェクトに使用した後、そこからライブラリを作成しました。ここで見つけることができます: sslcontext-kickstart
あなたのユースケースでは、証明書をトラストストア ファイルにラップした次のスニッパーがうまく機能するはずです。
SSLFactory sslFactory = SSLFactory.builder()
.withDefaultTrustMaterial()
.withTrustMaterial("my-truststore.jks", "password".toCharArray())
.build();
HttpsURLConnection httpsURLConnection = (HttpURLConnection) new URL(url).openConnection();
httpsURLConnection.setHostnameVerifier(sslFactory.getHostnameVerifier());
httpsURLConnection.setSSLSocketFactory(sslFactory.getSslContext().getSocketFactory());