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

是否有用于禁用证书验证的java设置?,java,ssl-certificate,Java,Ssl Certificate,我在尝试启动应用程序时收到此错误: Sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: java.net.UnknownHostException:oscp.thawte.com 该应用程序位于封闭的网络后面,永远无法访问oscp.thawte.com。是否有可以禁用此功能的java设置?-Dcom.sun

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

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

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

-Dcom.sun.net.ssl.checkRevocation=false不完全是一个设置,但您可以覆盖默认的TrustManager和HostnameVerifier以接受任何内容。这不是一种安全的方法,但在您的情况下,它是可以接受的


完整示例:

在Axis webservice中,如果必须禁用证书检查,请使用以下代码:


setProperty(“axis.socketSecureFactory”、“org.apache.axis.components.net.SunFakeTrustSocketFactory”)

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

样本:

  • 从cli更改目录到jre\bin

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

  • 从需要的服务器下载并保存所有证书链

  • 添加证书(在需要删除文件“.\lib\security\cacerts”上的“只读”属性之前) keytool-alias REPLACE_TO_ANY_UNIQ_NAME-import-keystore..\lib\security\cacerts-file“r:\root.crt”

  • 我无意中发现了这么简单的提示。 其他解决方案需要使用InstallCert.Java和JDK


    来源:

    在我的Mac电脑上,我确信除了特定站点之外,我不会在任何地方使用java,我可以使用Preferences->java打开java控制面板并关闭检查。如果DLink修复了他们的证书,我会重新打开它


    除了上面的答案。您可以通过实现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);
    
    然而,这并不是一个好的生产实践


    上的这个示例包含一个实用程序类,您可以在项目中复制它。

    它非常简单。在我看来,这是对每个人来说最好的方法

           Unirest.config().verifySsl(false);
           HttpResponse<String> response = null;
           try {
               Gson gson = new Gson();
               response = Unirest.post("your_api_url")
                       .header("Authorization", "Basic " + "authkey")
                       .header("Content-Type", "application/json")
                       .body("request_body")
                       .asString();
               System.out.println("------RESPONSE -------"+ gson.toJson(response.getBody()));
           } catch (Exception e) {
               System.out.println("------RESPONSE ERROR--");
               e.printStackTrace();
           }
       }
    
    Unirest.config().verifySsl(false);
    HttpResponse响应=null;
    试一试{
    Gson Gson=新的Gson();
    response=Unirest.post(“您的api url”)
    .header(“授权”、“基本”+“授权密钥”)
    .header(“内容类型”、“应用程序/json”)
    .机构(“请求机构”)
    .asString();
    System.out.println(“----响应----”+gson.toJson(RESPONSE.getBody());
    }捕获(例外e){
    System.out.println(“----响应错误--”);
    e、 printStackTrace();
    }
    }
    
    我应该在哪里执行它?它是JVM的命令行参数。您还可以使用OpenJDK 6以编程方式进行设置,这对我不起作用。(可能是特定于Sun的)OpenJDK代码中引用了它,请尝试检查您使用的是哪个TrustManager。对我来说,它不适用于Java 8。我在代码中使用了System.setProperty(“com.sun.net.ssl.checkRevocation”、“false”)。属性没有设置,但没有效果。这应该是可接受的答案。接受答案中提到的属性对许多JVM无效。您确定这会有帮助吗?我不确定海报是否试图自己打ws-call。如何打开此文件?