Secure Fusion: SSL-Konfiguration

Es gibt eine aktualisierte Version dieses Tutorials in der Fusion-Dokumentation. Dies ist der erste Teil einer Serie von Artikeln über…

Es gibt eine aktualisierte Version dieses Tutorials in der Fusion-Dokumentation.

Dies ist der erste Teil einer Serie von Artikeln über die Sicherung Ihrer Daten in Lucidworks Fusion.

Der erste Schritt zur Sicherung Ihrer Daten besteht darin, dafür zu sorgen, dass alle von und zu Fusion gesendeten Daten verschlüsselt werden, indem HTTPS und SSL anstelle von normalem HTTP verwendet werden. Da diese Verschlüsselung auf der Transportebene und nicht auf der Anwendungsebene stattfindet, ist die einzige erkennbare Änderung, wenn Fusion für HTTPS und SSL konfiguriert ist, das Schlosssymbol in der Standortanzeige des Browsers, das anzeigt, dass das HTTPS-Protokoll verwendet wird:

ssl-Symbol

Die SSL-Verschlüsselung schützt Ihre Daten auf dem Weg über die Leitung und verhindert, dass zwischengeschaltete Server Ihre Konversation abhören oder Schlimmeres. SSL-Zertifikate werden verwendet, um die Identität eines Servers zu überprüfen, um „Man-in-the-Middle“-Angriffe zu verhindern. Sollten Sie Fusion immer für die Verwendung von SSL konfigurieren? Wenn sich Fusion in einem sicheren Netzwerk befindet und keine Anfragen von externen Servern annimmt, nein. Andernfalls, Ja!

Um Fusion für die Verwendung von SSL zu konfigurieren, müssen Sie den Fusion UI-Dienst für SSL konfigurieren. Alle Anfragen an Fusion laufen über den Fusion UI-Dienst. Dies gilt auch für Anfragen an die Fusion REST-API-Dienste, da der Fusion UI-Dienst den Fusion-Authentifizierungs-Proxy enthält, der die Zugriffsrechte der Benutzer kontrolliert. Da der Fusion UI-Dienst (derzeit) den Jetty-Server verwendet, geht es in diesem Beitrag hauptsächlich um die Konfiguration des Jetty-Servers für SSL. Auf der Eclipse-Website finden Sie eine gute Übersicht und detaillierte Anweisungen zur Konfiguration von Jetty für SSL: http://www.eclipse.org/jetty/documentation/current/configuring-ssl.html

Es gibt zwei konzeptionelle Teile des Konfigurationspuzzles:

  • SSL-Schlüsselpaare, Zertifikate und der JSEE-Keystore
  • Konfiguration des Fusion UI-Dienstes

Puzzleteil eins: SSL-Schlüsselpaare, Zertifikate und der JSEE Keystore

Um loszulegen, benötigen Sie einen JSSE Keystore für Ihre Anwendung, der ein SSL-Schlüsselpaar und ein signiertes SSL-Zertifikat enthält. Das SSL-Protokoll verwendet ein Schlüsselpaar, das aus einem öffentlich freigegebenen Schlüssel und einem privaten Schlüssel besteht, der niemals freigegeben wird. Der öffentliche Schlüssel ist Teil des SSL-Zertifikats. Der Keystore des Servers enthält sowohl das Schlüsselpaar als auch das Zertifikat.

Zu Beginn der Sitzung tauschen der Client und der Server eine Reihe von Nachrichten gemäß dem SSL-Handshake-Protokoll aus. Der Handshake-Prozess generiert einen gemeinsamen zufälligen symmetrischen Verschlüsselungsschlüssel, der für alle nach dem Handshake ausgetauschten Nachrichten verwendet wird. Während des ersten Nachrichtenaustauschs sendet der Server sein SSL-Zertifikat, das seinen öffentlichen Schlüssel enthält, an den Client. In den nächsten beiden Runden des Gesprächs wird der gemeinsame symmetrische Schlüssel festgelegt. Aufgrund der cleveren Eigenschaften des Schlüsselpaars verwendet der Client den öffentlichen Schlüssel, um eine Nachricht zu generieren, die nur vom Inhaber des privaten Schlüssels entschlüsselt werden kann, wodurch die Authentizität des Servers bewiesen wird. Da dieser Prozess sehr rechenintensiv ist, wird er nur einmal, während des Handshakes, durchgeführt. Danach wird der gemeinsame symmetrische Schlüssel mit einem vereinbarten Verschlüsselungsalgorithmus verwendet, dessen Einzelheiten den Rahmen dieses Blogbeitrags sprengen würden. Einen schönen Überblick über diesen Prozess mit einem Schema finden Sie in dieser IBM-Dokumentation. Für wirklich Neugierige empfehle ich die Lektüre dieser Beschreibung der mathematischen Grundlagen des Handshakes für Nicht-Mathematiker.

Neben dem öffentlichen Schlüssel enthält ein Zertifikat auch den Namen der Website, die E-Mail-Adresse des Ansprechpartners und Unternehmensinformationen. Zertifikate sind sehr langweilig anzuschauen:

  Bag Attributes
      friendlyName: localhost
      localKeyID: 54 69 6D 65 20 31 34 35 35 38 34 30 33 35 36 37 37 35
  Key Attributes: <No Attributes>
  -----BEGIN RSA PRIVATE KEY-----
  Proc-Type: 4,ENCRYPTED
  DEK-Info: DES-EDE3-CBC,E2BCF2C42A11885A

  tOguzLTOGTZUaCdW3XzoP4xDPZACEayuncv0HVtNRR3PZ5uQNUzZaNX0OgbSUh5/
  /w6Fo7yENJdlTgMC4XafMRN+rTCfVj3XBsnOvQVj7hLiDq1K26XpvD79Uvb2B4QU
    ...  (omitting many similar lines) ...
  x3LI5ApQ2G2Oo3OnY5TZ+EYuHgWSICBZApViaNlZ4ErxXp1Xfj4iFtfi50hcChco
  poL9RdLpOx/CyLuQZZn5cjprIjDA3FcvmjBfOlmE+xm+eNMIKpS54w==
  -----END RSA PRIVATE KEY-----
  Bag Attributes
      friendlyName: localhost
      localKeyID: 54 69 6D 65 20 31 34 35 35 38 34 30 33 35 36 37 37 35
  subject=/C=NA/ST=NA/L=Springfield/O=some org/OU=some org unit/CN=firstname lastname
  issuer=/C=NA/ST=NA/L=Springfield/O=some org/OU=some org unit/CN=firstname lastname
  -----BEGIN CERTIFICATE-----
  MIIDqzCCApOgAwIBAgIEIwsEjjANBgkqhkiG9w0BAQsFADB4MQswCQYDVQQGEwJO
  QTELMAkGA1UECBMCTkExFDASBgNVBAcTC1NwcmluZ2ZpZWxkMREwDwYDVQQKEwhz
    ...  (omitting many similar lines) ...
  fALku9VkH3j7PidVR5SJeFzwjvS+KvjpmxAsPxyrZyZwp2qMEmR6NPjLjYjE+i4S
  04UG7yrKTm9CuElddLFAnuwaNAuifbbZ6P3BR3rFaA==
  -----END CERTIFICATE-----

Zertifikate werden von einer Zertifizierungsstelle (CA) signiert, entweder von einer Stammzertifizierungsstelle oder einer Zwischenzertifizierungsstelle. Zwischenzertifizierungsstellen bieten mehr Sicherheit und sollten daher für die Erstellung des Endbenutzerzertifikats verwendet werden.

Sie müssen ein signiertes Zertifikat und ein SSL-Schlüsselpaar von Ihrem Systemadministrator erhalten und es in den vom Fusion UI Jetty-Server verwendeten Keystore einfügen. In einer Produktionsumgebung müssen Sie Ihre Keystore-Datei an einem sicheren Ort mit den entsprechenden Berechtigungen einrichten und dann den Fusion UI Jetty-Server für die Verwendung dieses Keystore konfigurieren. Wenn Sie kein signiertes SSL-Zertifikat haben, können Sie eine Keystore-Datei mit einem selbstsignierten Zertifikat erhalten, das für die Entwicklung und für Demos geeignet ist. Führen Sie dazu das Dienstprogramm Jetty start.jar aus (Einzelheiten im nächsten Abschnitt).

Das Dienstprogramm Java keytool, das Teil des JDK ist, kann verwendet werden, um das Serverzertifikat und den privaten Schlüssel im Keystore zu speichern. Es gibt verschiedene Dateiformate, um den privaten Schlüssel und das signierte Zertifikat zu bündeln. Die am häufigsten verwendeten Formate sind PKCS12 und PEM. PKCS12-Dateien haben in der Regel die Dateinamenerweiterung „.p12“ oder „.pfx“ und PEM-Dateien haben in der Regel die Dateinamenerweiterung „.pem“. In einer Windows-Umgebung haben Sie höchstwahrscheinlich eine „.pfx“-Datei, die sowohl den privaten Schlüssel als auch das signierte Zertifikat enthält und direkt in den Keystore hochgeladen werden kann (siehe Beispiel unten). In einer *nix-Umgebung müssen Sie, wenn Sie ein Bündel von Zertifikatsdateien und eine Schlüsselpaar-Datei haben, das openssl-Tool verwenden, um eine PKCS12-Datei zu erstellen, die dann über das keytool in den Keystore hochgeladen werden kann. Signierte Zertifikatsdateien haben die Endung „.crt“ und private Schlüsseldateien die Endung „.key“. Sie sollten jedoch immer prüfen, ob es sich um Binärdateien handelt oder ob der Inhalt in ASCII vorliegt, die höchstwahrscheinlich bereits im oben gezeigten PEM-Format vorliegen.

Das folgende Beispiel verwendet das Java-Dienstprogramm keytool, um einen neuen Schlüsselspeicher mit dem Namen „my.keystore.jks“ aus dem privaten Schlüssel und dem signierten Zertifikatsbündel „my.keystore.p12“ zu erstellen, das im pkcs12-Format vorliegt. Das Keytool fordert Sie zur Eingabe eines Keystore-Passworts für die Quell- und die Zieldatei auf:

> keytool -importkeystore  
> -srckeystore my.keystore.p12 
> -srcstoretype pkcs12 
> -destkeystore my.keystore2.jks 
> -deststoretype JKS

Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
Entry for alias localhost successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

Um Ihre Arbeit zu überprüfen, können Sie den Befehl keytool mit der Option „-list“ verwenden:

> keytool -list -keystore my.keystore2.jks

Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

localhost, Feb 18, 2016, PrivateKeyEntry,
Certificate fingerprint (SHA1): 63:1E:56:59:65:3F:83:2D:49:F1:AC:87:15:04:1A:E4:0C:E1:26:62

Zweites Puzzleteil: Konfiguration des Fusion UI Service

Der Fusion UI-Dienst verwendet den Jetty-Server. Das bedeutet, dass Sie zunächst den Jetty-Server des Fusion UI-Dienstes konfigurieren müssen, der sich im Fusion-Verzeichnis befindet apps/jetty/uiund ändern Sie dann die Port- und Protokollinformationen im Startskript des Fusion UI-Dienstes, das sich im Fusion-Verzeichnis befindet bin.

Jetty Server Konfiguration

Die Konfigurationsdateien für Fusion-Dienste, die auf dem Jetty-Server laufen, befinden sich im Fusion-Verzeichnis apps/jetty. Das Verzeichnis apps/jetty/ui enthält den Jetty-Server, der so konfiguriert ist, dass der Fusion UI-Dienst für die Standard-Fusion-Bereitstellung ausgeführt wird. Das Verzeichnis apps/jetty/home enthält die vollständige Jetty-Distribution.

Die folgenden Informationen stammen aus der Dokumentation http://www.eclipse.org/jetty/documentation/current/quickstart-running-jetty.html#quickstart-starting-https.

Das vollständige Home-Verzeichnis der Jetty-Distribution enthält eine Datei „start.jar“, die zur Konfiguration des Jetty-Servers verwendet wird. Das Kommandozeilenargument „–add-to-startd“ wird verwendet, um dem Server zusätzliche Module hinzuzufügen. Die Angabe von „–add-to-startd=https“ bewirkt, dass ini-Dateien hinzugefügt werden, um eine ssl-Verbindung herzustellen, die das HTTPS-Protokoll wie folgt unterstützt:

  • erstellt start.d/ssl.ini, die einen SSL-Connector konfiguriert (z.B. Port, Keystore usw.), indem Sie etc/jetty-ssl.xml und etc/jetty-ssl-context.xml zur effektiven Befehlszeile hinzufügen.
  • erstellt start.d/https.ini, die das HTTPS-Protokoll auf dem SSL-Connector konfiguriert, indem Sie etc/jetty-https.xml in die effektive Befehlszeile einfügen.
  • prüft, ob eine Datei etc/keystore vorhanden ist und lädt, falls nicht vorhanden, eine Demo-Keystore-Datei herunter.

Schritt 1: Führen Sie das Dienstprogramm start.jar aus.

Um den Fusion UI-Dienst jetty server für SSL und HTTPS zu konfigurieren, führen Sie im Verzeichnis apps/jetty/ui den folgenden Befehl aus:

> java -jar ../home/start.jar --add-to-startd=https

Sofern nicht bereits eine Datei namens „keystore“ vorhanden ist, installiert dieses Dienstprogramm eine lokale Keystore-Datei, die ein selbstsigniertes Zertifikat und ein entsprechendes Schlüsselpaar enthält, das für Entwicklungs- und Demozwecke verwendet werden kann. Außerdem fügt es die Dateien „http.ini“ und „ssl.ini“ in das lokale Unterverzeichnis „start.d“ ein:

> ls start.d
http.ini        https.ini       ssl.ini

Dieser Satz von „.ini“-Dateien bestimmt die Jetty-Steuerung der Konfiguration des Servers. Bei diesen Dateien handelt es sich um Java-Eigenschaftsdateien, die zur Konfiguration der http-, https- und ssl-Module verwendet werden. In der Standarddistribution von Fusion enthält das Verzeichnis apps/jetty/ui/start.d nur die Datei „http.ini“, so dass der Fusion UI-Dienst über HTTP läuft. Das HTTPS-Modul erfordert das SSL-Modul, daher werden „.ini“-Dateien für beide hinzugefügt.

Schritt 2: Datei bearbeiten start.d/ssl.ini

Die „.ini“-Dateien sind Java-Eigenschaftsdateien. Bei der Installation ist die Datei „ssl.ini“ so konfiguriert, dass sie die Demo-Keystore-Datei verwendet. Dies ist praktisch, wenn Sie nur eine lokale Installation zu Entwicklungszwecken durchführen möchten, und besonders praktisch, wenn Sie noch nicht über die erforderlichen Zertifizierungspakete und den Keystore verfügen – an diesem Punkt ist Ihre Konfiguration vollständig. Wenn Sie jedoch einen echten Schlüsselspeicher haben, müssen Sie alle Eigenschaften des Schlüsselspeichers in der Datei „ssl.ini“ bearbeiten:

### SSL Keystore Configuration

## Setup a demonstration keystore and truststore
jetty.keystore=etc/keystore
jetty.truststore=etc/keystore

## Set the demonstration passwords.
## Note that OBF passwords are not secure, just protected from casual observation
## See http://www.eclipse.org/jetty/documentation/current/configuring-security-secure-passwords.html
jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g
jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4

Beachten Sie die verschlüsselten Passwörter – verwenden Sie das oben erwähnte Tool: http://www.eclipse.org/jetty/documentation/current/configuring-security-secure-passwords.html, um Passwörter zu verschlüsseln, zu prüfen oder zu verschlüsseln.

Schritt 3 (optional): Deaktivieren Sie die Verwendung von HTTP

Sie können die Verwendung von HTTP vollständig deaktivieren, indem Sie den HTTP-Connector aus der Startkonfiguration von Jetty entfernen:

> rm start.d/http.ini

Konfiguration des Fusion UI-Dienstes

Das Startskript für den Fusion UI-Dienst befindet sich in der Fusion-Distribution bin Verzeichnis, in Dateien bin/ui und bin/ui.cmdfür *nix bzw. Windows. Es setzt eine Reihe von Umgebungsvariablen und startet dann den Jetty-Server. Die Argumente des exec-Befehls zum Starten des Jetty-Servers erfordern eine Änderung:
ändern Sie das Befehlszeilenargument von „jetty.port=$HTTP_PORT“ in „https.port=$HTTP_PORT“

Das Startskript für den UI-Dienst wird über das Hauptstartskript bin/fusion aufgerufen. Sobald der Start von Fusion abgeschlossen ist, sollten Sie in der Lage sein, im Browser über das HTTPS-Protokoll sicher darauf zuzugreifen (siehe erster Screenshot oben). Wenn der Server ein selbstsigniertes Zertifikat verwendet, geben sowohl der Firefox- als auch der Chrome-Browser Warnungen aus, in denen Sie bestätigen müssen, dass Sie diesem Server wirklich vertrauen wollen. Der Chrome-Browser kennzeichnet Websites, die ein selbstsigniertes Zertifikat verwenden, durch die Anzeige eines Warnsymbols anstelle des sicheren Schlosssymbols:

Chrom-Warnung

Diskussion

SSL ist der Sicherheitsgurt, der für die Fahrt auf der Datenautobahn erforderlich ist: Bevor Sie Ihre Daten an einen entfernten Server senden, schnallen Sie sich an! Zukünftige Versionen von Fusion werden noch mehr Sicherheit in Form von „SSL überall“ bieten. Das bedeutet, dass es möglich sein wird, die Dienste von Fusion so zu konfigurieren, dass der gesamte Datenverkehr zwischen den Komponenten verschlüsselt wird und Ihre Daten vor internen neugierigen Blicken geschützt sind.

SSL bietet Datensicherheit auf der Transportebene. Zukünftige Beiträge in dieser Serie werden sich mit folgenden Themen befassen:

  • Sicherheit auf der Anwendungsebene, mit den fein abgestuften Berechtigungen von Fusion
  • Sicherheit auf der Dokumentenebene mit MS Sharepoint Security-Trimming
  • Fusion und Kerberos

You Might Also Like

Vom Suchunternehmen zum praktischen KI-Pionier: Unsere Vision für 2025 und darüber hinaus

CEO Mike Sinoway gibt Einblicke in die Zukunft der KI und stellt...

Read More

Wenn KI schief geht: Fehlschläge in der realen Welt und wie man sie vermeidet

Lassen Sie nicht zu, dass Ihr KI-Chatbot einen 50.000 Dollar teuren Tahoe...

Read More

Lucidworks Kernpakete: Branchenoptimierte KI-Such- und Personalisierungslösungen

Entdecken Sie unsere umfassenden Core Packages, die Analytics Studio, Commerce Studio und...

Read More

Quick Links