当前位置: 首页 > 知识库问答 >
问题:

OkHttp从2.5升级到2.6破坏HTTPS测试

逄宁
2023-03-14
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

测试使用Jetty服务器周围的包装器作为连接到的主机。对于主机和客户端来说,truststore和keystore是相同的。出于某种原因,从2.5到2.6的更改导致服务器提前关闭。

我唯一要改变的是maven中的OkHttp版本从2.5到2.6。测试类在这里(实现在TestInvokeHttpCommon中):https://github.com/apache/nifi/blob/8c2323dc8d0e107f1a99898370c7515fa9603122/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/test/test/processors/standard/testInvokehttpsl.java

共有1个答案

宗沛
2023-03-14

问题实际上是一个特定的密码套件TLS_DHE_DSS_WITH_AES_128_CBC_SHA从新版本的OKHTTP中过时。为了解决这个问题,可以按照@JessEWilson的建议,使用代码提供自定义的ConnectionSpec实例。

ConnectionSpec.Builder obsoleteSpecBuilder = new ConnectionSpec.Builder(ConnectionSpec.COMPATIBLE_TLS);
obsoleteSpecBuilder = obsoleteSpecBuilder.cipherSuites("TLS_DHE_DSS_WITH_AES_128_CBC_SHA");
ConnectionSpec obsoleteSpec = obsoleteSpecBuilder.build();
okHttpClient.setConnectionSpecs(Arrays.asList(obsoleteSpec));

然而,根本问题是Jetty使用的keystore和truststore没有任何有效的RSA或DSA密钥(有一个DSA密钥,但它在2年前过期了。显然,日期检查在以前的测试中没有活动)。没有这些密钥,Jetty就不能提供任何依赖于RSA/DSA的密码套件,因此,一旦删除TLS_*DSS*密码套件,客户机就没有兼容的密码套件了。

向keystore和truststore添加RSA密钥解决了这个问题,而不依赖于旧密码套件。

hw12203:...src/test/resources alopresto
10s @ 12:43:08 $ keytool -genkey -keyalg RSA -alias localhost -keystore localhost-ks.jks -validity 360 -keysize 2048
Enter keystore password:
What is your first and last name?
  [Unknown]:  localhost
What is the name of your organizational unit?
  [Unknown]:  Apache NiFi
What is the name of your organization?
  [Unknown]:  Apache
What is the name of your City or Locality?
  [Unknown]:  Santa Monica
What is the name of your State or Province?
  [Unknown]:  CA
What is the two-letter country code for this unit?
  [Unknown]:  US
Is CN=localhost, OU=Apache NiFi, O=Apache, L=Santa Monica, ST=CA, C=US correct?
  [no]:  yes

Enter key password for <localhost>
    (RETURN if same as keystore password):
hw12203:...src/test/resources alopresto
23s @ 12:46:09 $ keytool -exportcert -alias localhost -file localhost.der -keystore localhost-ks.jks
Enter keystore password:
Certificate stored in file <localhost.der>
hw12203:...src/test/resources alopresto
2s @ 12:46:34 $ keytool -import -alias localhost -file localhost.der -keystore localhost-ts.jks
Enter keystore password:
Owner: CN=localhost, OU=Apache NiFi, O=Apache, L=Santa Monica, ST=CA, C=US
Issuer: CN=localhost, OU=Apache NiFi, O=Apache, L=Santa Monica, ST=CA, C=US
Serial number: 6f3e5921
Valid from: Tue Jan 05 12:46:04 PST 2016 until: Fri Dec 30 12:46:04 PST 2016
Certificate fingerprints:
     MD5:  9F:CE:78:6D:18:0B:CF:7D:57:50:02:10:BA:98:27:62
     SHA1: FA:70:D1:5C:BE:90:D3:CA:A0:3D:5E:67:62:D1:25:F6:31:2E:59:31
     SHA256: A8:09:89:7C:19:6E:05:5B:CB:04:09:2C:30:5B:35:85:23:0F:C6:8A:12:00:4C:9F:39:5E:40:43:86:3E:FB:09
     Signature algorithm name: SHA256withRSA
     Version: 3

Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: AB 88 BA FA F7 F5 AE 22   69 E4 B6 89 3D FB B0 61  ......."i...=..a
0010: 30 95 A3 27                                        0..'
]
]

Trust this certificate? [no]:  yes
Certificate was added to keystore
 类似资料:
  • 我最近通过从源代码编译在CentOS机器上安装了Python 2.7.3。Python 2.7.3安装在/opt/python2.7上,当我安装它时,我只需更改/usr/bin/Python以指向新版本。这显然是错误的,因为当我这样做的时候,它打破了百胜。我会得到以下内容。 我更改了/usr/bin/python以指向python 2.6.6,但现在2.6.6是python的默认版本。你知道怎么解

  • 问题内容: 我想将OS X Leopard随附的默认python安装(2.5.1)升级到最新版本。请让我知道我如何实现这一目标。 谢谢 问题答案: 不要升级。 安装ActivePython(与其他人共存)。 开放终端 类型

  • 失败:构建失败,但有例外。 > 其中:脚本C:\flatter\packages\flatter\u tools\gradle\flatter。格雷德尔线:1070 错误:任务:app:compileFlutterBuildDebug的执行失败。 处理“命令”C:\flatter\bin\flatter。bat“”以非零退出值1结束 > 获取更多帮助https://help.gradle.org

  • 下面的代码过去是在JDK 1.7使用的JAXB实现下工作的,但现在在JDK 1.8下它被破坏了。在下面的代码中,您将发现关键的更改,它似乎在1.8中起作用。1.8下的“修复”并不是真正的修复,因为公开内部集合供外部世界直接修改是一种不好的做法。我想通过我的类来控制对内部列表的访问,我不想通过创建可观察的集合并聆听它们来使事情复杂化。这是不可接受的。 有没有办法让我的原始代码在JD 1.8的JAXB

  • 我已经按照http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html2.3上的说明进行了操作,但仍然得到了如下所示的stacktrace: ---(从SBT运行应用程序,启用自动重新加载)--- [信息]在/0:0:0:0:0:0:0:9000,播放-监听HTTP 请有人告诉我上面的stacktrace实际上是什

  • null 04:52:42.738警告:没有为分析源文件提供依赖项的字节码,最终可能会得到不太精确的结果。可以使用sonar.java.Libraries属性提供字节码