将证书与https URL关联

时间:2017-02-07 09:28:23

标签: java ssl certificate

我想连接到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相同

1 个答案:

答案 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指纹不等于今天提取的。可能你有一份旧的副本?

enter image description here

避免将此CA导入到根CA而不是叶证书