Javaに“トラストストア”を無視させることは可能ですか?取得したSSL証明書をそのまま受け入れますか?

StackOverflow https://stackoverflow.com/questions/1219208

  •  10-07-2019
  •  | 
  •  

質問

javax.mail APIを使用してメールを送信するSSLクライアントを作成しようとしています。私が抱えている問題は、サーバーがSSLの使用を要求しているが、サーバーが非標準のSSL証明書で構成されていることです。私が見つけたWebページは、証明書をトラストストアにインストールする必要があると言っています。そうしたくありません(必要な権限がありません。)

  1. Javaで証明書エラーを無視して受け入れるようにする方法はありますか?
  2. 失敗した場合、トラストストアをプログラムのローカルに置き、JVM全体にインストールしない方法はありますか?
役に立ちましたか?

解決

すべての証明書を受け入れる偽のTrustManagerを作成し、それをマネージャーとして登録する必要があります。このようなもの:

public class MyManager implements com.sun.net.ssl.X509TrustManager {
  public boolean isClientTrusted(X509Certificate[] chain) { return true; }
  public boolean isHostTrusted(X509Certificate[] chain) { return true; }
  ...
}


com.sun.net.ssl.TrustManager[] managers =
  new com.sun.net.ssl.TrustManager[] {new MyManager()};

com.sun.net.ssl.SSLContext.getInstance("SSL").
       .init(null, managers, new SecureRandom());

他のヒント

#1の作業コード(jdk1.6.0_23内)

インポート

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;

実際には、すべてのTrustManagerコードを信頼します。

TrustManager trm = new X509TrustManager() {
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    public void checkClientTrusted(X509Certificate[] certs, String authType) {

    }

    public void checkServerTrusted(X509Certificate[] certs, String authType) {
    }
};

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { trm }, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

これを試してください(質問2への回答):

System.setProperty("javax.net.ssl.trustStore", "/path/to/truststore");

これを追加のコマンドラインパラメーターとして指定することもできます。

java -Djavax.net.ssl.trustStore=/path/to/truststore <remaining arguments>

Fedoraでは、これは / etc / pki / java / cacerts

にあるシステム全体のJavaトラストストアです。

VM引数に -Dtrust_all_cert = true を追加するだけです。この引数は、すべての証明書チェックを無視するようjavaに指示します。

コマンドラインでは、引数 -noCertificationCheck をjavaに追加して、証明書チェックを無視できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top