我在尝试启动应用程序时收到此错误:
Sun.security.validator.ValidatorException: PKIX path validation failed:
java.security.cert.CertPathValidatorException: java.net.UnknownHostException:oscp.thawte.com
该应用程序位于封闭网络后面,无法访问oscp.thawte.com。是否有可以禁用此功能的java设置?
答案 0 :(得分:43)
-Dcom.sun.net.ssl.checkRevocation=false
答案 1 :(得分:13)
不完全是设置,但您可以覆盖默认的TrustManager和HostnameVerifier以接受任何内容。不是一种安全的方法,但在你的情况下,它是可以接受的。
答案 2 :(得分:5)
使用java软件分发中的cli实用程序 keytool 导入(以及 trust!)所需的证书
示例:
从cli change dir改为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”
来源:http://www.java-samples.com/showtutorial.php?tutorialid=210
答案 3 :(得分:1)
MK给出的答案很好:)
在Axis webservice中,如果必须禁用证书检查,请使用以下代码:
AxisProperties.setProperty("axis.socketSecureFactory","org.apache.axis.components.net.SunFakeTrustSocketFactory");
答案 4 :(得分:1)
在Mac上,我确定除了特定站点之外,我不允许在其他任何地方使用Java,因此我可以使用Preferences-> Java来调出Java控制面板并关闭检查。如果DLink修复了他们的证书,我将其重新打开。
答案 5 :(得分:1)
除了上面的答案。您可以通过实现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上的该示例包含一个可以在项目中复制的实用程序类。
答案 6 :(得分:-1)
这很简单。我认为这是每个人的最佳方法
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();
}
}