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

我在尝试启动一个应用程序时收到了这个错误:

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

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

307729 次浏览

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

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

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

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

SetProperty (“ axis.socketSecureFactory”,“ org.apache.axis.components.net . SunfakeTrustSocketFactory”) ;

使用 java 软件发行版中的 cli 实用程序 键盘工具来获得所需的导入(和 信任!)证书

样本:

  1. 从 cli 改变目录到 jre bin

  2. 检查 keystore (在 jre bin 目录中找到的文件)
    Keytool-list-keystore. . lib 安全漏洞
    输入密钥库密码: 改变

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

  4. 添加证书(在需要删除文件上的“只读”属性. . lib 安全性 ccerts”之前) Keytool-alias REPLACE _ TO _ any _ UNIQ _ NAME-import-keystore. . lib security ccerts-file“ r: root.crt”

我不小心发现了这么简单的小窍门。 其他解决方案需要使用 InstallCert.Java 和 JDK

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

在我的 Mac 上,我确信除了一个特定的站点,我不会允许 Java 在任何地方出现,我可以使用 Preferences-> Java 来打开 Java 控制面板并关闭检查。如果 DLink 修复了他们的证书,我将重新打开它。

Java control panel - Advanced

除了上面的答案之外,您还可以通过实现 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 证书验证上的这个示例包含一个可以在项目中复制的实用工具类。

这是非常简单的。在我看来,这是每个人最好的方式

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