为什么 httpclient 在 DO droplet 上有不同的行为(与 SSL 相关)?

Why httpclient has a different behavior (SSL-related) on DO droplet?

在我的 Ubuntu (16.04) 开发者上。环境。我可以创建默认 httpclient 并将请求发送到 https 端点(例如 Slack),但是,在产品上。环境。 (DO droplet with Ubuntu 14.04)我得到这个错误:

sun.security.validator.ValidatorException: PKIX path building failed: 
     sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

编辑:仍在尝试解决这个问题...我猜安装了 Java (Oracle) 的 DO droplet 没有与 Ubuntu 桌面图像相同的证书。我将 Slack 证书(使用 SO 其他地方提到的这个 InstallCert 工具获得)添加到 cacerts(和 运行 update-ca-certificates)无济于事。

您的 Java cacerts 可能缺少 geotrust 根。

您可以使用 keytool 查看哪些证书是受信任的。 例如,对于 Oracle JVM:

keytool -list -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts

查找具有正确签名的条目,即:

debian:geotrust_global_ca.pem, 18/05/2015, trustedCertEntry, 
Certificate fingerprint (SHA1): DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12

如果不受信任,您可以安装它,从以下位置下载:
https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.pem

安装

keytool -import -trustcacerts -file GeoTrust_Global_CA.pem -alias GeoTrust_Global_CA -keystore $JAVA_HOME/jre/lib/security/cacerts