我正在尝试从java访问https://blockchain.info/lastblock,
但代码抛出:
引起:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径
这通常是由于自签名证书,但这个证书不是自签名的(您可以在浏览器中查看)。看起来java不是用户系统CA证书。 这不是一个bug吗? 我导出了证书并将其动态插入到Java KeyStore中,但我不喜欢这个解决方案(不确定它是否会检查此证书的撤销列表等)。 那么解决这个问题的最佳解决方案是什么?
我使用此代码测试http://www.cs.ucsb.edu/~pconrad/cs56/examples/ldap/SimpleQuery/InstallCert.java
答案 0 :(得分:0)
信任根源列表不时发生变化,而Java内置的信息通常与浏览器略有不同。这些信任根是存储在系统密钥库中的(在技术上在系统信任库中),您可以通过将要支持的额外根添加到存储在主目录中的每用户密钥库中来添加它们。它位于使用keytool
操纵的默认位置。
您实际认为放在那里的证书 - 如果还没有 - 将是“COMODO证书颁发机构”;喜欢它的浏览器(例如,你可以独立于Java验证它),但你的Java却没有。它有直接签署的revokation信息,所以它应该是你所需要的; SSL / PKI 假设只能从根CA证书引导。