java - HttpsURLConnection のデフォルト証明書に自己署名証明書を追加する方法

okwaves2024-01-25  10

おはようございます。

私の問題は、デフォルトの信頼できる証明書だけでなく、自己署名証明書も受け入れる 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());

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。