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
问题实际上是一个特定的密码套件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属性提供字节码