2017-10-19 103 views
0

爲了向下兼容的原因,我需要的Geode Jetty服務器使用的TLSv1,而不是1.1或1.2製作的Geode使用的TLSv1

隨着ssl-enabled-components=webssl-protocols=TLSv1.0gemfire.properties然後當我開始的Geode,檢查與SSL Labs的HTTPS連接,然後我得到一個TLS結果:

HTTPS SSL check

我要找的TLS 1.1和TLS 1.0檢查也說YesNo

Geode SSL docsMake sure your Java installation includes the JSSE API and familiarize yourself with its use.

的JSSE即將在JRE/lib/security目錄的java.security配置。我將其設置爲不禁用任何安全算法並重新啓動Geode,但結果相同。 TLS 1.1和1.0未能通過上面的SSL實驗室測試。

有沒有辦法強制Geode以https.protocols=TLSv1開頭?

當我嘗試啓動的定位與使用--J=-XX:https.protocols=TLSv1然後我得到

Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. Unrecognized VM option 'https.protocols=TLSv1'

沒有單獨碼頭的配置,我可以找到...

更新--J=-Dhttps.protocols=TLSv1是正確的設置爲將TLS協議分配給JVM,並啓動Geode定位器和服務器。

更新當我設置java.security設置jdk.tls.disabledAlgorithms=TLSv1.1, TLSv1.2like the opposite of this那麼它是不可能的Jetty服務器都通過HTTPS進行通信。這讓我覺得Geode/Jetty ssl-protocols=TLSv1.0設置不適用?

Jetty configTLS v1.0, v1.1 and SSL v3 are no longer supported by default. If your Jetty implementation requires these protocols for legacy support, they can be enabled manually.

有沒有用的Geode配置碼頭的方式?

+1

首先,我想你想使用'--J = -Dhttps.protocols = TLSv1'。我最近也在看這個,並且在使用特定協議(在我的情況下是SSL)上沒有成功。但我沒有去修改JRE的'java.security'文件中的任何東西。 AFAIK,TLS版本是向後兼容的,所以你的服務器應該總是支持最新版本。 –

+0

@JensD感謝'--J = -Dhttps.protocols = TLSv1'現在開始。問題是,當我使用[SSL實驗室](https://www.ssllabs.com/ssltest/analyze.html)測試HTTPS(通過Jetty)時,它仍然只是使用TLS 1.2和NOT TLS 1.1或1.0所以它就像[Jetty配置](https://www.eclipse.org/jetty/documentation/9.4.x/configuring-ssl.html)是否有一種方法來設置Geode內的Jetty我找不到配置文件...? – rupweb

+0

我不明白爲什麼當服務器已經支持各種低版本的客戶端時,你想降級你的服務器TLS版本。無論如何,請注意,我們將把Jetty的版本更新到9.4,這完全降低了對TLSv1.1及更低版本的支持。對於在Jetty中設置協議的具體細節,我們在這裏執行:https://github.com/apache/geode/blob/d16d192b22f2932ac95780f18e92f0aece730240/geode-core/src/main/java/org/apache/geode/management/內部/ JettyHelper.java#L86 –

回答

1

我不相信你現在可以做到這一點。主要是因爲Jetty是如何在內部進行配置的。 Jetty維護由正則表達式^.*_(MD5|SHA|SHA1)$定義的排除密碼列表。不幸的是,這個列表似乎勝過了可能被添加爲「包含」的任何密碼。以下是我用於測試的一個非常簡單的Jetty示例:https://gist.github.com/jdeppe-pivotal/c0c6e7de4282bc077357749fc91bc44f。當你運行它時,Jetty將產生一個很好的轉儲密碼和協議。

現在,您可以通過以下curl執行成功的請求:curl -k -v --tlsv1.2 https://localhost:8081/。現在,如果您使用tlsv1.0進行嘗試,它將會失敗,因爲必要的密碼套件都被禁用。但是,如果您取消註釋行:sslContextFactory.setExcludeCipherSuites()那麼事情應該開始工作。它所做的是刪除當前排除的所有密碼(並允許它們使用)。不幸的是,如果你只是嘗試並添加密碼(不排除所有內容),事情仍然不起作用。請注意,通過這樣做,Jetty仍然配置爲TLSv1.2(和1.1和1.0),但客戶端可以使用較低的協議版本。

底線是Geode沒有明確排除Jetty中的任何密碼。因此,如果你希望添加必要的密碼,它們很可能不會有效。我爲此打開了一個錯誤:https://issues.apache.org/jira/browse/GEODE-3891

+0

是的,我認爲你是對的,我認爲解決的辦法是使用Geode代碼中的'setExcludeCipherSuites'來設置協議,並構建... tbc – rupweb