第一次运行就报unable to find valid certification path to requested target
时间: 2023-11-06 13:00:57 浏览: 71
引用: "unable to find valid certification path to requested target" 这个错误通常是由于Java程序无法验证目标网站的SSL证书而引起的。解决这个问题的方法有两种,一种是手动导入SSL证书,另一种是忽略SSL验证。如果你希望手动导入SSL证书,你可以按照以下步骤进行操作:
1. 打开浏览器,访问目标网站,点击浏览器的锁形状图标。
2. 选择"证书信息"或"详细信息"等选项,并将证书保存到本地。
3. 打开Java安装目录下的bin文件夹,找到keytool.exe文件。
4. 打开命令提示符,进入到bin文件夹,并运行以下命令导入证书:
```
keytool -import -alias your_alias -keystore "path/to/your/keystore" -file "path/to/your/certificate.cer"
```
其中,your_alias是你给证书起的别名,your_keystore是你想要保存keystore文件的路径,certificate.cer是你保存的证书文件名。
5. 当提示输入keystore密码时,输入一个你自己设定的密码并确认。
6. 在Java代码中指定使用该keystore,可以在程序启动时添加以下参数:
```
-Djavax.net.ssl.trustStore="path/to/your/keystore" -Djavax.net.ssl.trustStorePassword=your_password
```
如果你希望忽略SSL验证,你可以通过以下方法实现:
1. 在Java代码中添加以下代码,以忽略SSL验证:
```java
import javax.net.ssl.*;
import java.security.cert.X509Certificate;
try {
// 创建信任管理器
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
// 设置SSLContext
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
// 设置HttpsURLConnection默认的SSLSocketFactory
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// 设置HttpsURLConnection默认的HostnameVerifier
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
} catch (Exception e) {
e.printStackTrace();
}
```
请注意,忽略SSL验证存在一定的安全风险,建议在正式环境中谨慎使用。
阅读全文