Vorwort
Um es benutzen zu können, müssen Sie es zuerst verstehen. Ich bin zu faul, um Bilder zu zeichnen, damit ich Bilder von den Online -großen Leuten zeichnen kann. Die Struktur von Springcloud ist wie in der Abbildung dargestellt:
Anwendungsszenarien der Microservice -Architektur:
1. System geteilt, mehrere Subsysteme
2. Jedes Subsystem kann mehrere Anwendungen bereitstellen und das Lastausgleich zwischen Anwendungen implementiert
3. Ein Service -Registrierungszentrum ist erforderlich, und alle Dienste sind im Registrierungszentrum registriert. Lastausgleich wird auch durch die Verwendung bestimmter Strategien für im Registrierungszentrum registrierte Dienste erreicht.
4. Alle Kunden greifen über dieselbe Gateway -Adresse auf die Backend -Dienste zu. Durch die Routing -Konfiguration bestimmt das Gateway, welcher Service eine URL -Anforderung erledigt. Lastausgleich wird auch verwendet, wenn Anfragen an den Dienst weiterleitet.
5. Manchmal müssen Dienste auch aufeinander zugreifen. Beispielsweise gibt es ein Benutzermodul und andere Dienste müssen bei der Bearbeitung einiger Dienste Benutzerdaten von Benutzerdiensten erhalten.
6. Es wird ein Leistungsschalter benötigt, um Zeitüberschreitungen und Fehler während der Serviceanrufe rechtzeitig zu behandeln, um zu verhindern, dass das Gesamtsystem aufgrund von Problemen mit einem der Dienste gelähmt wird.
7. Eine Überwachungsfunktion ist auch erforderlich, um die Zeit für jeden Serviceanruf zu überwachen, usw.
Einführung
In der Microservice -Architektur übernehmen wir normalerweise die DevOps -Organisationsmethode, um die enormen Kosten zu senken, die durch die Kommunikation zwischen Teams verursacht werden, um die Lieferfunktionen von Microservice -Anwendungen zu beschleunigen. Auf diese Weise werden die ursprünglich vom Betriebs- und Wartungsteam übermittelten Online -Informationen an die Mitglieder der Microservice -Organisation gesteuert, um sich selbst zu pflegen. Dies enthält eine große Anzahl sensibler Informationen wie das Datenbankkonto und das Kennwort. Offensichtlich ist es sehr gefährlich, wenn wir sensible Informationen in der Konfigurationsdatei der Microservice -Anwendung direkt in Klartext speichern. Als Antwort auf dieses Problem bietet Spring Cloud Config die Möglichkeit, Eigenschaften zu verschlüsseln und zu entschlüsseln, um die Informationen in der Konfigurationsdatei zu schützen. Zum Beispiel das folgende Beispiel:
Spring.DataSource.username = didispring.datasource.Password = {Cipher} DBA6505BAA81D78BD08799D8D4429DE499BD4C2053C05F029E7CFBF143695F5BIn der Feder -Cloud -Konfiguration wird der Inhalt als verschlüsselter Wert unter Verwendung des {Cipher} -Präfixes vor dem Attributwert markiert. Wenn der MicroService -Client die Konfiguration lädt, entschlüsselt das Konfigurationszentrum den Wert automatisch mit dem Präfix {cipher}. Durch die Implementierung dieses Mechanismus kann das Betriebs- und Wartungsteam den verschlüsselten Ressourcen der Online -Informationen an das MicroService -Team sicher angeben, ohne sich um die Leckage dieser sensiblen Informationen zu kümmern. Führen Sie vor, wie Sie diese Funktion im Konfigurationszentrum verwenden.
Voraussetzungen für den Gebrauch
Bei der Verschlüsselungs- und Entschlüsselungsfunktion der Spring Cloud -Konfiguration gibt es eine notwendige Voraussetzung, auf die wir achten müssen. Um diese Funktion zu aktivieren, müssen wir in der Laufzeit des Konfigurationszentrums eine unbegrenzte JCE -Version (unbegrenzte Stärke Java Cryptography Extension) installieren. Obwohl die JCE -Funktion in JRE verfügbar ist, wird die Standardversion mit Längenbeschränkung verwendet. Wir können es von der offiziellen Website von Oracle herunterladen. Es ist ein komprimiertes Paket. Nach der Dekompression sehen Sie die folgenden drei Dateien:
Readme.txtlocal_policy.jarus_export_policy.jar
Wir müssen die Dateien von Local_Policy.jar und US_Export_Policy.jar in das Verzeichnis $ java_home/jre/lib/security kopieren, um den ursprünglichen Standardinhalt zu überschreiben. Zu diesem Zeitpunkt werden die Vorbereitungen für Verschlüsselung und Entschlüsselung abgeschlossen.
Verwandte Endpunkte
Nach Abschluss der JCE -Installation können Sie versuchen, das Konfigurationszentrum zu starten. In der Konsole werden einige konfigurationsspezifische Endpunkte ausgegeben, hauptsächlich einschließlich:
Sie können versuchen, auf den Endpunkt /Encrypt /Status -Endpunkt per GET -Anfrage zugreifen zu können, und wir erhalten Folgendes:
{"Beschreibung": "Für den Verschlüsselungsdienst wurde kein Schlüssel installiert", "Status": "No_key"}Diese Rückgabe zeigt an, dass die Verschlüsselungsfunktion des aktuellen Konfigurationszentrums noch nicht verwendet werden kann, da der entsprechende Schlüssel nicht für den Verschlüsselungsdienst konfiguriert ist.
Konfigurationsschlüssel
Wir können die Schlüsselinformationen (Symmetrieschlüssel) in der Konfigurationsdatei direkt über die Eigenschaft "Encrypt.key" angeben, z. B.:
Encrypt.Key = Didispace
Starten Sie nach dem Hinzufügen der oben genannten Konfigurationsinformationen das Konfigurationszentrum neu und greifen Sie auf den Endpunkt /Encrypt /Status zu. Wir erhalten den folgenden Inhalt:
{"Status": "OK"}Zu diesem Zeitpunkt ist die Verschlüsselungs- und Entschlüsselungsfunktion in unserem Konfigurationszentrum zur Verwendung bereit. Sie können auch versuchen, auf die Endpunkte /Verschlüsseln und /entschlüsselt zu werden, um Verschlüsselungs- und Entschlüsselungsfunktionen zu erhalten. Beachten Sie, dass beide Endpunkte Postanfragen sind und die Verschlüsselungs- und Entschlüsselungsinformationen über die Anforderungsbehörde gesendet werden müssen. Wenn Sie beispielsweise den Befehl curl als Beispiel übernehmen, können wir die Endpunkte für Verschlüsselung und Entschlüsselung auf folgende Weise aufrufen:
$ curl localhost: 7001/Verschlüsselung -d didispace3c70a809bfa24ab88bcb5e1df51cb9e4dd4b8fec88301eb7a18177f1769c849aNC9f29400c920480Be2c99406ae28c72920480480Be2c99406ae28C7 $ LOCALHOST: 7001/Decrypt -d 3C70A809BFA24AB88BCB5E1DF51CB9E4DDDD4B8FEC8301EB7A18177F1769C849AE9C9F29400C920480BE2C99406060606060606060606060606060606060606AE28C7DIDISPAC
Hier verwenden wir eine symmetrische Verschlüsselung, um die Implementierungsmethode des Schlüssels durch Konfiguration des Parameters von Encrypt.Key anzugeben. Diese Methode ist relativ einfach zu implementieren, und es ist nur ein Parameter erforderlich. Darüber hinaus können wir auch die Umgebungsvariable Encrypt_key verwenden, um sie so zu konfigurieren, dass die wichtigsten Informationen extern gespeichert werden können.
Asymmetrische Verschlüsselung
Das Konfigurationszentrum der Spring Cloud -Konfiguration kann nicht nur die Symmetrieverschlüsselung, sondern auch eine asymmetrische Verschlüsselung (z. B. RSA -Schlüsselpaare) verwenden. Obwohl die Schlüsselgenerierung und -konfiguration der asymmetrischen Verschlüsselung relativ komplex sind, weist sie eine höhere Sicherheit auf. Lasst uns im Folgenden detailliert vorstellen, wie die asymmetrische Verschlüsselung verwendet wird.
Zunächst müssen wir das Schlüsselpaar über das Keytool -Tool generieren. Keytool ist ein Schlüssel- und Zertifikat -Management -Tool im JDK. Es ermöglicht Benutzern, ihre eigenen Schlüsselpaare und zugehörige Zertifikate für öffentliche/private Schlüssel zu verwalten, um (über digitale Signature) Selbstauthentifizierung (Benutzer zu anderen Benutzern/Diensten) oder Datenintegritäts- und Authentifizierungsdienste zu verwalten. Dieses Tool ist in Versionen nach JDK 1.4 enthalten und sein Standort ist: %Java_Home %/bin/keytool.exe.
Die spezifischen Befehle zum Generieren des Schlüssels sind wie folgt:
$ keytool -genkeypair -alias config -server -keyalg rsa -keystore config -server.keystore
Geben Sie das Keystore -Passwort ein:
Geben Sie das neue Passwort erneut ein:
Was ist dein erster und Nachname?
[Unbekannt]: Zhaiyongchao
Wie lautet Ihr Name für Organisationseinheiten?
[Unbekannt]: Firma
Wie heißt Ihr Organisationsname?
[Unbekannt]: Organisation
Wie heißt Ihre Stadt oder Region?
[Unbekannt]: Stadt
Wie heißt Ihre Region Provinz/Stadt/autonome Region?
[Unbekannt]: Provinz
Wie lautet der Code mit zwei Buchstaben für diese Einheit?
[Unbekannt]: China
Ist CN = Zhaiyongchao, OU = Company, O = Organisation, L = Stadt, ST = Provinz, C = China richtig?
[Nein]: yGeben Sie das Schlüsselkennwort für <config-server> ein
(Wenn das Kennwort dem Keystore übereinstimmt, drücken Sie die Eingabetaste):
Geben Sie das neue Passwort erneut ein:
Wenn wir diese Eingabeaufforderungsinformationen nicht Schritt für Schritt nicht eingeben möchten, können wir mit -Dname direkt angeben, während das Keystore -Kennwort und das Schlüsselkennwort direkt mit den StorePass und -Keypass angegeben werden können. Daher können wir direkt den gleichen Keystore wie den obigen Befehl über den folgenden Befehl erstellen:
$ keytool -genkeypair -alias config -server -keyalg rsa / -dname "cn = zhaiyongchao, ou = company, o = organisation, l = city, st = provinz, c = China" / -Keypass 222222 / -Keystore config -server
Standardmäßig ist der von dem obigen Befehl erstellte Schlüssel nur 90 Tage gültig. Wenn wir seine Gültigkeitsdauer einstellen möchten, können wir dies tun, indem wir den Parameter -Valität hinzufügen. Zum Beispiel können wir die Gültigkeitsdauer des Schlüssels durch den folgenden Befehl auf ein Jahr erweitern:
$ keytool -genkeypair -alias config -server -keyalg rsa / -dname "cn = zhaiyongchao, ou = company, o = organisation, l = city, st = provinz, c = China" / -Keypass 222222 / -Keystore config -server
In den oben genannten Methoden der Befehlsgenerierung werden schließlich eine Konfigurationserver-Datei im aktuellen Ausführungsverzeichnis des Befehls generiert. Als nächstes müssen wir es in einem Speicherort im Dateisystem des Konfigurationszentrums speichern, z. B. in das aktuelle Benutzerverzeichnis und dann dem Konfigurationszentrum relevante Konfigurationsinformationen hinzufügen:
Encrypt.key-store.location = file: // $ {user.home} /config-server.keystoreencrypt.key-store.alias=config-serverencrypt.key-store.password=11111111111111Scrypt.keystore.secret=222222Wenn wir den Config-Server.KeyStore in das Verzeichnis SRC/Main/Ressourcen im Konfigurationszentrum einfügen, können wir es auch direkt wie folgt konfigurieren: Encrypt.key-store.location = config-server.keyStore. Darüber hinaus können die Konfigurationsinformationen der asymmetrischen Verschlüsselung auch über Umgebungsvariablen konfiguriert werden, und ihre entsprechenden spezifischen Variablennamen sind wie folgt:
ENCRYPT_KEY_STORE_LACECRYPT_KEY_STORE_ALIASENCRYPT_KEY_STORE_PASSWORDECRYPT_KEY_STORE_SECRET
Das Konfigurieren von Keystore-bezogenen Informationen über Umgebungsvariablen kann eine bessere Sicherheit erreichen. Daher ist es für uns eine gute Wahl, sensible Kennwortinformationen in den Umgebungsvariablen im Konfigurationszentrum zu speichern.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.