2017-10-19 14 views
0

Aus Gründen der Abwärtskompatibilitätsgründen Ich brauche einen Geode Jetty Server TLSv1 zu verwenden und nicht 1.1 oder 1.2Make Geode verwenden TLSv1

Mit ssl-enabled-components=web und ssl-protocols=TLSv1.0 Satz in gemfire.properties dann, wenn ich die Geode starten und überprüfen Sie die HTTPS-Verbindung mit SSL Labs dann ich erhalte eine TLS Ergebnis:

HTTPS SSL check

ich für die TLS 1.1 und TLS 1.0 prüft Suche auch Yes sagen nicht No

Die Geode SSL docs sagen Make sure your Java installation includes the JSSE API and familiarize yourself with its use.

Das JSSE ist über die java.security config in der JRE/lib/security. Ich habe dies eingestellt, um keine Sicherheitsalgorithmen zu deaktivieren und Geode neu gestartet, aber die Ergebnisse sind die gleichen. TLS 1.1 und 1.0 schlagen den SSL Labs-Test oben fehl.

Gibt es eine Möglichkeit, Geode zum Starten mit https.protocols=TLSv1 zu zwingen?

Wenn ich versuche, einen Lokator zu beginnen, dass die Verwendung --J=-XX:https.protocols=TLSv1 dann bekomme ich

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

Es gibt keine separate Jetty Config ich finden kann ...

aktualisieren--J=-Dhttps.protocols=TLSv1 ist die korrekte Einstellung, um der JVM TLS-Protokolle zuzuweisen und die beim Starten von Geode-Locator und -Server funktioniert.

aktualisiert Wenn ich java.securityjdk.tls.disabledAlgorithms=TLSv1.1, TLSv1.2like the opposite of this Einstellung gesetzt, dann ist es nicht möglich, alle über HTTPS mit dem Jetty-Server zu kommunizieren. Das lässt mich denken, dass die Geode/Jetty ssl-protocols=TLSv1.0 Einstellung auch nicht gilt?

Die Jetty config sagt TLS 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.

Gibt es eine Möglichkeit Jetty mit Geode zu konfigurieren?

+1

Für einen Anfang, ich denke, Sie möchten '--J = -Dhttps.protocols = TLSv1' verwenden. Ich habe das kürzlich auch angeschaut und konnte kein spezifisches Protokoll verwenden (SSL in meinem Fall). Ich ging jedoch nicht so weit, irgend etwas in der JRE-Datei 'java.security' zu ändern. AFAIK, die TLS-Versionen sind abwärtskompatibel, also sollte Ihr Server immer die neueste Version unterstützen. –

+0

@JensD danke das '--J = -Dhttps.protocols = TLSv1' startet jetzt. Das Problem ist, wenn ich das HTTPS (über Anlegestelle) mit [SSL Labs] (https://www.ssllabs.com/ssltest/analyze.html) teste, dann kommt es immer noch als nur TLS 1.2 und nicht TLS 1.1 oder 1.0 so ist es wie die [Jetty config] (https://www.eclipse.org/jetty/documentation/9.4.x/configuring-ssl.html) gibt es eine Möglichkeit, Jetty in Geode einzurichten Ich kann keine Konfiguration finden Datei... ? – rupweb

+0

Ich verstehe nicht wirklich, warum Sie die Server-TLS-Version herabstufen sollten, wenn der Server bereits verschiedene niedrigere versionierte Clients unterstützt. Unabhängig davon, bitte beachten Sie, dass wir die Version von Jetty auf 9.4 aktualisieren werden, wodurch die Unterstützung für TLSv1.1 und darunter vollständig eingestellt wird. Für die aktuellen Besonderheiten der Einstellung des Protokolls in Jetty tun wir das hier: https://github.com/apache/geode/blob/d16d192b22f2932ac95780f18e92f0aece730240/geode-core/src/main/java/org/apache/geode/management/ intern/JettyHelper.java # L86 –

Antwort

1

Ich glaube nicht, dass Sie dies derzeit erreichen können. Hauptsächlich, weil Jetty intern konfiguriert wird. Jetty verwaltet eine Liste von ausgeschlossenen Chiffren, die durch die Regex ^.*_(MD5|SHA|SHA1)$ definiert sind. Leider scheint diese Liste alle Chiffren zu übertrumpfen, die als "enthalten" hinzugefügt werden können. Hier ist ein sehr einfaches Jetty-Beispiel, das ich zum Testen verwendet habe: https://gist.github.com/jdeppe-pivotal/c0c6e7de4282bc077357749fc91bc44f. Jetty wird einen schönen Dump der Verschlüsselungen und Protokolle erzeugen, die er benutzt, wenn Sie das ausführen.

So wie es ist, können Sie eine erfolgreiche Anfrage mit der folgenden Curl durchführen: curl -k -v --tlsv1.2 https://localhost:8081/. Wenn Sie das jetzt mit tlsv1.0 versuchen, wird es fehlschlagen, da die erforderlichen Verschlüsselungssammlungen deaktiviert sind. Wenn Sie jedoch die Zeile auskommentieren: sslContextFactory.setExcludeCipherSuites() dann sollten die Dinge anfangen zu arbeiten. Dadurch werden alle derzeit ausgeschlossenen Verschlüsselungen entfernt (und sie können verwendet werden). Leider, wenn Sie nur versuchen, Ziffern hinzuzufügen (ohne auch alles auszuschließen), funktionieren die Dinge immer noch nicht. Beachten Sie, dass Jetty dadurch weiterhin für TLSv1.2 (und 1.1 und 1.0) konfiguriert ist, der Client jedoch eine niedrigere Protokollversion verwenden kann.

Die Quintessenz ist, dass Geode keine Verschlüsselungen von Jetty explizit ausschließt.Wenn Sie also hoffen, die notwendigen Verschlüsselungen hinzuzufügen, werden sie höchstwahrscheinlich nicht effektiv sein. Ich habe einen Fehler dafür geöffnet: https://issues.apache.org/jira/browse/GEODE-3891

+0

Ja, ich denke, Sie haben Recht, ich denke, die Lösung ist 'setExcludeCipherSuites' in Geode-Code verwenden, um das Protokoll zu setzen, und bauen ... tbc – rupweb

Verwandte Themen