和第三方对接,遇到点问题,求大佬解惑

2020-07-15 14:12:42 +08:00
 Evilk

现在的情况:

1.Java 那边,通知我们后端(PHP)处理结果,但他们那边一直报错

java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

2.尝试过的方法:

(1).他们在他们的服务器上,curl 我们的 URL,成功

(2).用 postman,访问我们的 URL,成功

(3).直接通过浏览器访问我们的 URL,成功

之前怀疑是 TLS 版本问题 后来检查了我们的服务器,同时支持 TLS-1.2 & TLS-1.3 & HTTP/2

现在的问题:

对方找不到原因,让我们检查 问题是,其他方式都能成功, 只是他们通过 Java 程序,直接通知我们,就报错

有人遇到过这种情况吗?

3578 次点击
所在节点    PHP
30 条回复
tankren
2020-07-15 14:17:49 +08:00
回复:找不到原因,自己检查
Evilk
2020-07-15 14:22:48 +08:00
@tankren 关键其他方式都能成功,就他们程序报错,他们找不到原因.感觉无解.
jfjiefan
2020-07-15 14:23:29 +08:00
之前遇到过,都是 java 端支持的协议或加密过低导致。
要么 java 升级版本
要么 nginx 这边支持不再安全的协议或加密算法
entertainyou
2020-07-15 14:23:43 +08:00
应该是对方用的 java 版本太旧,bundle 的 CA 证书太老.

https://www.ssllabs.com/ 这里可以测试 ssl 证书的兼容性. 你也可以问下对方用的 jre 版本,然后用相同的 jre 版本写个测试代码访问看能不能复现.
Evilk
2020-07-15 14:29:02 +08:00
@jfjiefan 我不太懂 Java,应该如何跟对方阐述清楚?
Evilk
2020-07-15 14:32:13 +08:00
@entertainyou 对方只是说,他们的 jdk 版本是 1.8
MoYi123
2020-07-15 14:41:49 +08:00
让他们做个 docker 镜像发过来。
xuanbg
2020-07-15 15:29:55 +08:00
用 http 协议看看是不是就不报错了,是的话就是你这边的证书有问题或者他们那边的 ssl 库有问题。如果他们用 https 连别家接口正常,那基本就是你家证书的问题了。
dilu
2020-07-15 15:33:23 +08:00
你用 php 写个脚本去请求,用 strace 看一下系统调用

方便的话贴一下 strace 的调用结果 大家一起探讨一下
qwerthhusn
2020-07-15 15:38:38 +08:00
对方不是 jdk1.8,如果是 8 以下,默认只会用 1.1 1.0 版本

如果用的是 jdk11 的早期版本,TLS1.3 的 java 实现是有 BUG 的,要么更新到 jdk11 新的版本,要么通过配置让客户端自行禁用 1.3
lscho
2020-07-15 16:08:55 +08:00
查个毛查,给自己找事干呢,1 、2 、3 的三张截图甩给他们让他们自己查。。
Evilk
2020-07-15 16:12:32 +08:00
问题是,我们服务经常和第三方通讯,从来没有因为 SSL 的问题报错
他们也说,他们和其他家通讯,也没有报错,就跟我们通讯报错
Evilk
2020-07-15 16:12:58 +08:00
@xuanbg 问题是,我们服务经常和第三方通讯,从来没有因为 SSL 的问题报错
他们也说,他们和其他家通讯,也没有报错,就跟我们通讯报错
NjcyNzMzNDQ3
2020-07-15 16:14:19 +08:00
这不就是甩锅吗。。见的挺多了,很无奈的
Evilk
2020-07-15 16:14:21 +08:00
@dilu 你的意思是,去请求他们 Java 的某个接口吗?
Evilk
2020-07-15 16:15:40 +08:00
@qwerthhusn 你的意思是,对方不是用的 jdk1.8? 所以他们 Java 程序只支持 TLS 1.1 1.0 吗?
我应该如何阐述清楚,让他们检查他们 Java 的 TLS 版本?
Evilk
2020-07-15 16:16:33 +08:00
@lscho 1-3 方法,我们双方都清楚,但他们说,他们和别家通讯没问题,就和我们通讯有问题
我们也是如此,现在就僵持在这里了,烦死了
LinJunzhu
2020-07-15 16:23:37 +08:00
应该是你们的 SSL 证书缺失中间证书的问题, Java 、Android WebView 不支持自动去找中间证书,Mac 、Window 、iOS 都支持。

所以只会在 Java Api 调用 / Android WebView 访问 时会发生
LinJunzhu
2020-07-15 16:27:05 +08:00
解决方式是: 把你们的 SSL 正式跟中间证书合并, 有在线合并证书的网站,搜下就有
index90
2020-07-15 16:30:12 +08:00
让他们 Java 程序发起请求,你这边抓 handshake 包看看啊

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

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

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

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

© 2021 V2EX