1
yangff 2016-02-03 18:39:19 +08:00 via Android
内部用的?自己签嘛。。
|
2
wy315700 2016-02-03 18:39:46 +08:00
把根证书加进去
|
3
realpg OP @wy315700
我 google 的结果,根证书只能加入本地的 jre keystore ,用命令行指令 在代码中添加证书信任, google 到的结果并测试通过的只有把服务器当前的证书加入,这个操作可以代入根证书而不是当次连接的证书么? |
10
7654 2016-02-03 19:17:54 +08:00
写个脚本自动做啊
|
11
realpg OP |
12
kaneg 2016-02-03 22:01:46 +08:00
如果客户端代码是自己写的,可以设置信任所有证书(当然安全自负了)。我以前用 apache 的 http client 做过,如果楼主需要我明天找找那段代码发给你
|
13
realpg OP @kaneg
谢谢,这个我会的。 sslSF.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 但是不能这么写。 我说了劫持很严重,这里面有问题,不敢这么信任 我发这个贴就是想问问,有没有 runtime 临时信任一个根证书的方法 |
14
vibbow 2016-02-04 05:59:46 +08:00
记得好像可以手动指定一个 keystore
|
15
kaneg 2016-02-04 22:02:37 +08:00
@realpg
你这个是是否校验 hostname ,如果证书链不被信任,还是无法通过的。你要有选择性的信任一个或多个证书链,可以参考以下方式: SSLSocketFactory mysf = new SSLSocketFactory(new TrustStrategy() { public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { //这里检验你的证书链是否被信任 return false; } }); Scheme https = new Scheme("https", 443, mysf); client.getConnectionManager().getSchemeRegistry().register( https); |
16
realpg OP @kaneg
sslSF.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 事实上,这段代码现在就存在于我的 JAVA 程序内,只要注释掉就报错,恢复程序就能正常使用。 看 ALLOW_ALL_HOSTNAME_VERIFIER 是效验域名,实际上,加上这个,我这里就根本不检测证书链了直接无报错了 |
17
wql 2016-02-05 11:06:46 +08:00 via Android
建议改用 Start SSL
|
19
wql 2016-02-05 11:25:26 +08:00 via Android
@realpg 那只有收费证书一条路了,或者让他们 startSSL 买一个 59.99 或 199.99 刀的两年无限证书套餐。
|
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 |