javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:即使我已经创建了证书

时间:2015-04-29 14:48:58

标签: java ssl

我得到以下例外。

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:

我以下面两种方式安装了证书。

  1. 使用InstallCert.java“domain.com”
  2. 使用Keytool - 导入。
  3. 但仍然从我的应用程序中获得上述SSL握手异常。

    我还需要为tomcat添加什么吗?

    请帮帮我。过去两天我们正在研究这个问题。 提前谢谢。

    谢谢, 戒。

2 个答案:

答案 0 :(得分:0)

检查证书是否在“管理受信任的根证书”中。如果单击证书并说不安全,则需要添加到“管理受信任的根证书”中。

然后,如果您正在使用Eclipse或类似的工作,您需要将jsscacert文件(由installCert.java制作)放入%JAVA_HOME%\ jdk_version \ jre \ lib \ security并将其添加到eclipse的路径中

  

-Djavax.net.ssl.trustStore = “PATH_TO_jssecacerts”

答案 1 :(得分:-1)

以下是从帖子Using a custom truststore in java as well as the default one中获取的代码段 我刚刚删除了另外一个您可以添加的信任管理器,如果您想使用自己的信任库

  

			TrustManagerFactory tmf = TrustManagerFactory
					.getInstance(TrustManagerFactory.getDefaultAlgorithm());
			// Using null here initialises the TMF with the default trust store.
			tmf.init((KeyStore) null);

			// Get hold of the default trust manager
			X509TrustManager defaultTm = null;
			for (TrustManager tm : tmf.getTrustManagers()) {
				if (tm instanceof X509TrustManager) {
					defaultTm = (X509TrustManager) tm;
					break;
				}
			}
			//

			

			SSLContext sslContext = SSLContext.getInstance("TLS");
			sslContext.init(null, new TrustManager[] { defaultTm }, null);

			// You don't have to set this as the default context,
			// it depends on the library you're using.
			SSLContext.setDefault(sslContext);

			
			// Not sure that you need this but add it
			HttpsURLConnection.setDefaultSSLSocketFactory(sslContext
					.getSocketFactory());
        

您必须与此连接,否则您的默认信任库不包含服务器证书,因此您可以创建自己的证书并加载它。看到我提供的帖子。

您可以通过调用X509TrustManager“customTm”的函数getAcceptedIssuers()来检查服务器证书是否被接受

祝你好运