当我尝试启动一个应用程序时,我收到了这个错误:
Sun.security.validator.ValidatorException: PKIX path validation failed:
java.security.cert.CertPathValidatorException: java.net.UnknownHostException:oscp.thawte.com
这个应用程序在一个封闭的网络中,永远无法访问 oscp.thawte.com。是否有一种Java设置可以禁用它?
当我尝试启动一个应用程序时,我收到了这个错误:
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以接受任何内容。这并不是一种安全的方法,但在您的情况下,它可能是可接受的。
除了上面的答案,您还可以通过实现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证书验证中包含一个实用类,您可以将其复制到您的项目中。
使用java软件分发中的cli实用程序 keytool 导入(并信任!)所需的证书
示例:
从cli更改目录到 jre\bin
检查keystore(在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
来源:http://www.java-samples.com/showtutorial.php?tutorialid=210
这非常简单。在我看来,这是每个人的最佳选择。
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();
}
}