Branch.io API 在创建时抛出 SSLException Unsupported record version Unknown-0.0
Posted
技术标签:
【中文标题】Branch.io API 在创建时抛出 SSLException Unsupported record version Unknown-0.0【英文标题】:Branch.io API throwing SSLException Unsupported record version Unknown-0.0 on create 【发布时间】:2020-07-06 19:48:11 【问题描述】:我的代码使用 Branch.io API 即时创建深层链接。它在 2017 年左右工作了至少一年,我不确定它什么时候停止工作。当我尝试连接到位于“https://api.branch.io/v1/url”的 api 时,我收到 SSLException Unsupported record version Unknown-0.0。任何人都知道使用 branch.io API 的 SSL 安全性发生了什么变化以使调用不再有效?如果我能弄清楚发生了什么变化,那么如何解决它应该是显而易见的。
相关的代码如下所示:
HttpURLConnection conn = (HttpURLConnection) new URL("https://api.branch.io/v1/url").openConnection();
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setFixedLengthStreamingMode(bytes.length);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
out = conn.getOutputStream();
out.write(bytes);
in = conn.getInputStream();
BufferedReader reader =new BufferedReader(new InputStreamReader(in));
【问题讨论】:
什么版本的 Java,它有变化吗?任何 sysprops 集,尤其是与 SNI 相关的?我不知道 2017 年,但目前对于缺少(或错误)SNI 的 ClientHello,服务器响应两个(!)无效的“版本 0.0”警报(致命 40 和警告 1)但它正确拒绝(带有 70)版本的 ClientHello低于 1.2,我知道省略 SNI 的(旧)Java 版本就是这种情况。 Java 8 并没有改变,我这边的代码库没有任何改变。我不相信,并且设置了 sysprops。 尝试使用 syspropjavax.net.debug=ssl,handshake
运行(或者如果您不能这样做,则使用wireshark、tcpdump 或类似工具进行外部捕获)并查看您的客户端是否确实发送了正确的 SNI(其中Java 日志拼写为 server_name)。如果不查看 exact 版本——这方面有一些错误,IIRC 在 j8 的生命周期内,但我不记得细节了。
【参考方案1】:
我有同样的问题,我发现我的云服务器是 Openjdk 1.8,我使用的是 IBM J9 VM (jre 1.8.0)。当我与 OpenJDK 双方连接时,它正在工作。最后我通过使用 Spring RestTemplate 而不是 HttpURLConnection 解决了问题,然后使用 IBM jre 也可以解决问题。
【讨论】:
以上是关于Branch.io API 在创建时抛出 SSLException Unsupported record version Unknown-0.0的主要内容,如果未能解决你的问题,请参考以下文章
JMockit 期望 API:如何在方法/构造函数调用时抛出异常
Hadoop API 在尝试初始化集群以使用 DistCp 时抛出错误
Facebook Graph API - 组权限 - 授权时抛出“无效范围”错误
Google Maps API 仅在使用 AJAX 时抛出“Uncaught ReferenceError: google is not defined”
YouTube Android Player API 在解组时抛出“BadParcelableException ClassNotFoundException:asc”与新的 YouTube 版本