是否有java设置来禁用证书验证?[副本]

92dk7w1h  于 2023-05-05  发布在  Java
关注(0)|答案(7)|浏览(156)

此问题已在此处有答案

Resolving javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed Error?(34个答案)
两年前关闭。
我在尝试启动应用程序时收到此错误:

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

该应用程序位于一个封闭的网络后面,永远无法访问oscp.thawte.com。有没有一个java设置可以禁用这个?

ecr0jaav

ecr0jaav1#

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

yptwkmov

yptwkmov2#

锁定,本次有disputes about this answer’s content正在解析。它目前不接受新的交互。

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

nkhmeac6

nkhmeac63#

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

然而,这对于生产来说不是一个好的做法。
How to disable SSL certificat validation in Java上的这个示例包含一个可以在项目中复制的实用程序类。

v8wbuo2f

v8wbuo2f4#

使用java软件分发版中的cli实用程序keytool进行导入(和trust!)所需证书
样品:
1.从CLI将目录更改为jre\bin
1.检查密钥库(在jre\bin目录中找到的文件)
keytool -list -keystore ..\lib\security\cacerts
输入密钥库密码:更改
1.从所需服务器下载并保存所有证书链。
1.添加证书(在需要删除文件“..\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=210

kmynzznz

kmynzznz5#

在我的Mac上,我确信我不会允许Java在任何地方,除了一个特定的网站,我能够使用首选项-〉Java调出Java控制面板,并关闭检查。如果DLink修复了他们的证书,我会重新打开它。

drkbr07n

drkbr07n6#

在Axis webservice中,如果您必须禁用证书检查,请使用以下代码:
AxisProperties.setProperty(“axis.socketSecureFactory”,“org.apache.axis.components.net.SunFakeTrustSocketFactory”);

iecba09b

iecba09b7#

这很简单。在我看来,这是对每个人最好的方法

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();
       }
   }

相关问题