是否有用于禁用证书验证的java设置?

Tim*_*Tim 49 java ssl-certificate

我在尝试启动应用程序时收到此错误:

Sun.security.validator.ValidatorException: PKIX path validation failed: 
java.security.cert.CertPathValidatorException:  java.net.UnknownHostException:oscp.thawte.com
Run Code Online (Sandbox Code Playgroud)

该应用程序位于封闭网络后面,无法访问oscp.thawte.com.是否有可以禁用此功能的java设置?

MK.*_*MK. 48

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

  • 对Oracle Java 8不起作用 (11认同)
  • 我无法使用Java 8。我在代码中使用了System.setProperty(“ com.sun.net.ssl.checkRevocation”,“ false”)。该属性确实已设置,但没有效果。 (4认同)
  • 我应该在哪里执行这个? (2认同)
  • 它是 JVM 的命令行参数。您也可以以编程方式进行设置 http://stackoverflow.com/questions/5189914/setting-system-property (2认同)

Rea*_*wTo 16

不完全是设置,但您可以覆盖默认的TrustManager和HostnameVerifier以接受任何内容.不是一种安全的方法,但在您的情况下,它是可以接受的.

完整示例:修复HTTPS中的证书问题


Meh*_*hdi 9

除了上面的答案。您可以通过实现 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);
Run Code Online (Sandbox Code Playgroud)

然而,这对于生产来说并不是一个好的做法。

这个关于如何在 Java禁用 SSL 证书验证的示例包含一个可以复制到项目中的实用程序类。

  • 第一次尝试就成功了。谢谢!! (3认同)

Але*_*ный 6

使用Java软件发行版中的cli实用工具keytool导入(并信任!)所需的证书

样品:

  1. 从cli更改目录到jre \ bin

  2. 检查密钥库(在jre \ bin目录中找到的文件)
    keytool -list -keystore .. \ lib \ security \ cacerts
    输入密钥库密码:changeit

  3. 从所需的服务器下载并保存所有证书链。

  4. 添加证书(在需要删除文件“ .. \ lib \ security \ cacerts”上的“只读”属性之前)密钥工具-alias REPLACE_TO_ANY_UNIQ_NAME-导入-keystore .. \ lib \ security \ cacerts-文件“ r:\ root”。 crt”

我偶然发现了这样一个简单的提示。其他解决方案需要使用InstallCert.Java和JDK

来源:http : //www.java-samples.com/showtutorial.php?tutorialid=210