sun.security.provider.certpath.SunCertPathBuilderException
通常表示Java在尝试建立SSL/TLS连接时,无法验证服务器证书的有效性
$JAVA_HOME/jre/lib/security
目录下,并替换现有的文件。
c. 重启你的Java应用程序。openssl
命令行工具导出服务器证书。证书通常以.cer
或.pem
格式提供。
b. 使用keytool
将证书导入Java证书库。打开命令提示符或终端,然后运行以下命令:
keytool -import -alias <alias_name> -file <certificate_file> -keystore $JAVA_HOME/jre/lib/security/cacerts
其中,将<alias_name>
替换为一个唯一的别名,将<certificate_file>
替换为服务器证书文件的路径。系统会提示你输入证书库密码,输入changeit
,然后按回车。
如果你想删除之前导入的证书,可以使用以下命令:
keytool -delete -alias <alias_name> -keystore $JAVA_HOME/jre/lib/security/cacertsimport javax.net.ssl.*;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
public class SSLUtilities {
public static void disableCertificateValidation() {
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 sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HostnameVerifier allHostsValid = (hostname, session) -> true;
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后,在您的Java应用程序启动时调用SSLUtilities.disableCertificateValidation()
。这将禁用证书验证并允许不安全的连接。请确保仅在测试环境中使用此选项,并了解存在的安全风险。
领取专属 10元无门槛券
手把手带您无忧上云