Java 的证书信任问题求解。

2016-02-03 18:30:28 +08:00
 realpg
近日服务器开始启动全线 HTTPS 加密。
采用了 Let's Encrypt 的证书,根证书是 DST Root CA X3 。

我的 Android 程序大多是用 Java 8 编译的,默认就信任这个根证书

然后这两天改一个之前写的 Java 程序,然后发现 JDK7 并不信任 DST Root CA X3

此程序界面是 Swing 的,原开发基于 JDK7 ,升级到 JDK8 , Swing 的 Error 满天飞,只得放弃升级。

通信部分采用 Apache HttpClient , 我知道 HC 是可以在链接时指定服务器证书,添加证书信任的,但是 Let's Encrypt 的证书只给 3 个月有效期,而且内部通信有大量不同的域名不同的证书。总不能一个证书到期就重新编译一次程序,或者更新一次证书吧。

所以我想有没有办法在 Runtime 阶段,添加一个指定 CA 的信任?毕竟 CA 证书有效期长且不变。随便 google 了一下,都是提前在客户端 jre 用命令行维护本地 keystore ,把 CA 加入本地 keystore ,这种对白痴用户太麻烦了。
5385 次点击
所在节点    程序员
21 条回复
zhxq
2016-02-06 03:38:48 +08:00
说到 Java 证书吧 我就想起来当初两三年前我申请了个 StartSSL 个人某网站用 免费啊……
然后因为用户主要在国内 所以接入了支付宝接口。
死活接收不到支付宝的异步通知(将已收款信息写入数据库)
无奈 咨询支付宝客服。
支付宝客服告知 只支持 Java 1.5 的默认支持根证书列表……
无奈,看到有 GeoTrust 的 RapidSSL 和 COMODO 的 PositiveSSL ,看前者贵( 7.99$/年,怕便宜的 PositiveSSL 不好用)然后买了一个,一切搞定。

结果吧,新的一年又有某个新网站需要证书。知道 StartSSL 不好使了,于是乎先买了个 COMODO 的,感觉还挺便宜,三年也就 15$(对我来说在学校约等于一顿饭钱……资本主义国家的大学伤不起,食堂照样是学校垄断的……)
结果还是不好使!!仍然接收不到异步通知!
然后乖乖买了 PositiveSSL ……换上了之后,一切正常……

坑爹的支付宝啊……
@realpg 这事儿我在群里讲过 23333333333

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/255254

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX