web-dev-qa-db-ja.com

証明書の検証を無効にするためのJava設定はありますか?

アプリケーションを起動しようとしたときにこのエラーを受け取りました:

Sun.security.validator.ValidatorException: PKIX path validation failed: 
Java.security.cert.CertPathValidatorException:  Java.net.UnknownHostException:oscp.thawte.com

アプリケーションは閉じたネットワークの背後にあり、oscp.thawte.comにアクセスすることはできません。これを無効にできるJava設定はありますか?

47
Tim

-Dcom.Sun.net.ssl.checkRevocation=false

47
MK.

設定ではありませんが、デフォルトのTrustManagerとHostnameVerifierをオーバーライドして、何でも受け入れることができます。安全なアプローチではありませんが、あなたの状況では、それは受け入れられるかもしれません。

完全な例: HTTPSの証明書の問題を修正

14
RealHowTo

Cliユーティリティkeytoolfrom Javaインポート用ソフトウェア配布(およびtrust! )必要な証明書

サンプル:

  1. Cliからdirをjre\binに変更します

  2. キーストア(jre\binディレクトリにあるファイル)を確認します
    keytool -list -keystore ..\lib\security\cacerts
    キーストアのパスワードを入力:changeit

  3. 必要なサーバーからすべての証明書チェーンをダウンロードして保存します。

  4. 証明書を追加します(ファイル「..\lib\security\cacerts」の「読み取り専用」属性を削除する前に)keytool -alias REPLACE_TO_ANY_UNIQ_NAME -import -keystore ..\lib\security\cacerts -file "r:\ root。 crt」

偶然、このような簡単なヒントを見つけました。他のソリューションでは、InstallCert.JavaおよびJDKの使用が必要です

ソース: http://www.Java-samples.com/showtutorial.php?tutorialid=21

上記の答えに加えて。 TrustManagerを実装することにより、プログラムで実行できます。

TrustManager[] trustAllCerts = new TrustManager[] {
        new X509TrustManager() {
          public Java.security.cert.X509Certificate[] getAcceptedIssuers() {
           return null;
          }
          @Override
          public void checkClientTrusted(X509Certificate[] arg0, String arg1)
           throws CertificateException {}

          @Override
          public void checkServerTrusted(X509Certificate[] arg0, String arg1)
            throws CertificateException {}
          }
     };

  SSLContext sc=null;
  try {
   sc = SSLContext.getInstance("SSL");
  } catch (NoSuchAlgorithmException e) {
   e.printStackTrace();
  }
  try {
   sc.init(null, trustAllCerts, new Java.security.SecureRandom());
  } catch (KeyManagementException e) {
   e.printStackTrace();
  }
  HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
  // Create all-trusting Host name verifier
  HostnameVerifier validHosts = new HostnameVerifier() {
  @Override
  public boolean verify(String arg0, SSLSession arg1) {
   return true;
  }
  };
  // All hosts will be valid
  HttpsURLConnection.setDefaultHostnameVerifier(validHosts);

ただし、これは実稼働環境では推奨されません。

JavaでSSL証明書の検証を無効にする方法 のこの例には、プロジェクトでコピーできるユーティリティクラスが含まれています。

2
Mehdi

MKからの回答は問題なく動作します:)

Axis webserviceで、証明書チェックを無効にする必要がある場合は、以下のコードを使用します。

AxisProperties.setProperty("axis.socketSecureFactory","org.Apache.axis.components.net.SunFakeTrustSocketFactory");
1

私のMacでは、Java特定のサイト以外の場所では、Preferences-> Javaを使用してJavaコントロールパネルでチェックをオフにしますDLinkが証明書を修正した場合は、再度オンにします。

Java control panel - Advanced

1
Steve Heffern