覆盖 Java 客户端中的 SSL 证书验证
当连接到具有自签名或过期 SSL 证书的服务器时,默认 Java 行为是拒绝连接。要允许此类连接,您有两个主要选项:
选项 1:将证书添加到信任库
这涉及通过导入服务器的证书来建立信任链进入 JVM 的信任库:
<JAVA_HOME>/bin/keytool -import -v -trustcacerts \ -alias server-alias -file server.cer \ -keystore cacerts.jks -keypass changeit \ -storepass changeit
选项 2:禁用证书验证
不推荐这种方法,因为它会削弱安全性,但可以使用以下代码来完成:
// Create a trust manager that doesn't validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } public void checkClientTrusted(X509Certificate[] certs, String authType) {} public void checkServerTrusted(X509Certificate[] certs, String authType) {} } }; // Install the all-trusting trust manager SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Access the HTTPS URL without certificate validation URL url = new URL("https://hostname/index.html");
推荐
为了增强安全性,强烈建议避免禁用证书验证(选项 2),而是使用信誉良好的 CA 来签署您的证书服务器的证书(或将自签名证书导入信任库)。
以上是如何在 Java 中处理自签名或过期的 SSL 证书?的详细内容。更多信息请关注PHP中文网其他相关文章!