3

Apache NiFi の OkHttp バージョンを 2.5 から 2.6 に更新する作業を行っています。これを行うと、すべての HTTPS テストが次の例外で失敗します。

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

テストでは、接続先のホストとして Jetty サーバーのラッパーを使用します。トラストストアとキーストアは、ホストとクライアントで同じです。何らかの理由で、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-processors/src/test/ java/org/apache/nifi/processors/standard/TestInvokeHttpSSL.java

4

1 に答える 1

3

TLS_DHE_DSS_WITH_AES_128_CBC_SHAこの問題は、新しいバージョンの OkHttp から廃止された特定の暗号スイートでした。ConnectionSpecこれを解決するには、@JesseWilson が提案したように、コードを使用してカスタム インスタンスを提供します。

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 が使用するキーストアとトラストストアに有効な RSA キーまたは DSA キーがないことでした (DSA キーは 1 つありましたが、2 年前に期限切れになりました。以前のテストでは日付チェックがアクティブではなかったようです)。これらのキーがなければ、Jetty は RSA/DSA 依存の暗号スイートを提供できず、TLS_*DSS*暗号スイートが削除されると、クライアントには互換性のある暗号スイートがありませんでした。

キーストアとトラストストアに 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
于 2016-01-05T21:31:56.147 に答える