Die Datengridsicherheit stellt sicher, dass ein in das Datengrid aufgenommener Server die erforderlichen Berechtigungsnachweise besitzt, so dass zerstörerische Server abgewehrt werden. Die Datengridsicherheit verwendet einen Mechanismus mit Shared-Secret-Zeichenfolgen.
Alle Server von WebSphere eXtreme Scale, einschließlich der Katalogserver, einigen sich auf eine Shared-Secret-Zeichenfolge. Wenn ein Server dem Datengrid beitritt, wird er aufgefordert, diese Shared-Secret-Zeichenfolge vorzulegen. Wenn die Shared-Secret-Zeichenfolge des beitretenden Servers mit der Zeichenfolge im führenden Server oder Katalogserver übereinstimmt, wird der beitretende Server akzeptiert, wenn nicht, wird die Join-Anforderung zurückgewiesen.
Das Senden einer Shared-Secret-Zeichenfolge als Klartext ist nicht sicher. Die Sicherheitsinfrastruktur von WebSphere eXtreme Scale stellt ein Manager-Plug-in für sichere Token bereit, damit der Server dieses Shared Secret vor dem Senden sichern kann. Sie müssen festlegen, wie die Sicherungsoperation implementiert wird. WebSphere eXtreme Scale stellt eine vordefinierte Implementierung bereit, in der die Sicherungsoperation so implementiert ist, dass das Shared Secret verschlüsselt und signiert wird.
Die Shared-Secret-Zeichenfolge wird in der Datei server.properties festgelegt. Weitere Informationen zur Eigenschaft "authenticationSecret" finden Sie im Abschnitt Servereigenschaftendatei.
Ein Manager-Plug-in für sichere Token wird über die Schnittstelle "com.ibm.websphere.objectgrid.security.plugins.SecureTokenManager" bereitgestellt.
Weitere Informationen zum SecureTokenManager-Plug-in finden Sie in der Dokumentation zur API 'SecureTokenManager'.
Die Methode "generateToken(Object)" verwendet ein Objekt und generiert anschließend ein Token, das von anderen nicht interpretiert werden kann. Die Methode "verifyTokens(byte[])" führt den umgekehrten Prozess aus. Sie konvertiert das Token zurück in das ursprüngliche Objekt.
Eine einfache SecureTokenManager-Implementierung verwendet einen einfachen Verschlüsselungsalgorithmus, wie z. B. einen XOR-Algorithmus (exklusives Oder), um das Objekt in serialisierter Form zu verschlüsseln, und anschließend den entsprechenden Entschlüsselungsalgorithmus, um das Token zu entschlüsseln. Diese Implementierung ist nicht sicher.
WebSphere eXtreme Scale stellt eine sofort verfügbare Implementierung für diese Schnittstelle bereit.
Die Standardimplementierung verwendet ein Schlüsselpaar, um die Signatur zu signieren und zu prüfen, und einen geheimen Schlüssel, um den Inhalt zu verschlüsseln. Jeder Server hat einen JCKES-Keystore, in dem das Schlüsselpaar (privater und öffentlicher Schlüssel) und der geheime Schlüssel gespeichert werden. Der Keystore muss ein JCKES-Keystore sein, damit geheime Schlüssel gespeichert werden können.
Diese Schlüssel werden verwendet, um die Shared-Secret-Zeichenfolge auf Senderseite zu verschlüsseln und zu signieren bzw. zu prüfen. Außerdem wird dem Token eine Verfallszeit zugeordnet. Auf Empfängerseite werden die Daten geprüft, entschlüsselt und mit der Shared-Secret-Zeichenfolge des Empfängers verglichen. Es sind keine SSL-Kommunikationsprotokolle (Secure Sockets Layer) zwischen einem Serverpaar für die Authentifizierung erforderlich, weil die privaten und öffentlichen Schlüssel demselben Zweck dienen. Wenn die Serverkommunikation jedoch nicht verschlüsselt ist, können die Daten einfach durch Ansicht der Kommunikation gestohlen werden. Da das Token relativ bald verfällt, ist das Sicherheitsrisiko durch Attacken durch Nachrichtenaufzeichnung und -wiederholung minimal. Das Risiko ist erheblich geringer, wenn alle Server hinter einer Firewall implementiert werden.
Dieser Ansatz hat den Nachteil, dass die eXtreme-Scale-Administratoren Schlüssel generieren und an alle Server übermitteln müssen, was während des Transports der Schlüssel zu Sicherheitsverletzungen führen kann.
Wie bereits im vorherigen Abschnitt erwähnt, können Sie einen Keystore erstellen, der ein Schlüsselpaar für die Signatur und Prüfung der Signatur sowie einen geheimen Schlüssel für die Verschlüsselung des Inhalts enthält.
Sie können beispielsweise den Befehl "keytool" von JDK 6 wie folgt verwenden, um die Schlüssel zu erstellen:
keytool -genkeypair -alias keypair1 -keystore key1.jck -storetype JCEKS -keyalg
rsa -dname "CN=sample.ibm.com, OU=WebSphere eXtreme Scale" -storepass key111 -keypass
keypair1 -validity 10000
keytool -genseckey -alias seckey1 -keystore key1.jck -storetype JCEKS -keyalg
DES -storepass key111 -keypass seckey1 -validity 1000
Diese beiden
Befehle erstellen ein Schlüsselpaar "keypair1" und einen geheimen Schlüssel "seckey1".
Anschließend können Sie Folgendes in der Servereigenschaftendatei konfigurieren:secureTokenKeyStore=key1.jck
secureTokenKeyStorePassword=key111
secureTokenKeyStoreType=JCEKS
secureTokenKeyPairAlias=keypair1
secureTokenKeyPairPassword=keypair1
secureTokenSecretKeyAlias=seckey1
secureTokenSecretKeyPassword=seckey1
secureTokenCipherAlgorithm=DES
secureTokenSignAlgorithm=RSA