我想连接到https://twitter.com/,
URL url = new URL("https://twitter.com/");
HttpURLConnection uc1 = (HttpURLConnection) url.openConnection();
我验证了我的信任库和我的密钥库(以及他们的密码)的位置,没关系。 我在keystore和truststore上保存了twitter证书和别名。我验证了,它已经存在。
我不知道如何将网址与我保存的证书联系起来;我收到错误:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我是怎么做到的?
****** ******** UPDATE
我已经使用setProperty设置了truststore和keystore。 当我在控制台上执行keytool -list -keystore .keystore时,我得到了
...
twittercert,2févr。 2017,trustedCertEntry, Empreinte du certificat(SHA1):10:F0:40:F2:93:7F:E0:69:2D:C1:B9:8C:8B:32:CC:E0:1E:43:82:52
...
与keytool -list相同
答案 0 :(得分:0)
Twitter证书由DigiCert发布,它作为受信任的根包含在JVM的默认信任库中,因此您无需配置任何内容。
如果您已配置自己的JKS信任库,则可能配置错误。确保使用System.setProperty
或-D
VM参数设置了信任库的正确路径。
System.setProperty("javax.net.ssl.trustStore", trustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword)
还验证truststore是否包含Digicert的 root 证书
<强>更新强> 请注意,您发布的Twitter证书的SHA-1指纹不等于今天提取的。可能你有一份旧的副本?
避免将此CA导入到根CA而不是叶证书