Préface
Pour pouvoir l'utiliser, vous devez d'abord le comprendre. Je suis trop paresseux pour dessiner des images, donc je peux dessiner des photos des grands gars en ligne. La structure de SpringCloud est comme indiqué sur la figure:
Scénarios d'application de l'architecture de microservice:
1. Système divisé, plusieurs sous-systèmes
2. Chaque sous-système peut déployer plusieurs applications, et l'équilibrage de charge entre les applications est implémenté
3. Un centre d'enregistrement de services est requis et tous les services sont enregistrés dans le centre d'enregistrement. L'équilibrage des charges est également réalisé en utilisant certaines stratégies pour les services enregistrés dans le centre d'enregistrement.
4. Tous les clients accèdent aux services backend via la même adresse de passerelle. Grâce à la configuration de routage, la passerelle détermine quel service gère une demande d'URL. L'équilibrage de charge est également utilisé lors de la transmission des demandes au service.
5. Les services doivent parfois également accéder les uns aux autres. Par exemple, il existe un module utilisateur et d'autres services doivent obtenir des données utilisateur des services utilisateur lors du traitement de certains services.
6. Un disjoncteur est nécessaire pour gérer les délais d'expiration et les erreurs lors des appels de service en temps opportun pour empêcher le système global d'être paralysé en raison de problèmes avec l'un des services.
7. Une fonction de surveillance est également nécessaire pour surveiller le temps passé sur chaque appel de service, etc.
introduction
Dans l'architecture microservice, nous adoptons généralement la méthode de l'organisation DevOps pour réduire les coûts énormes causés par la communication entre les équipes pour accélérer les capacités de livraison des applications de microservice. Cela rend les informations en ligne à l'origine contrôlées par l'équipe d'opération et de maintenance remise aux membres de l'organisation Microservice pour maintenir pour eux-mêmes, ce qui comprendra une grande quantité d'informations sensibles, telles que le compte de base de données et le mot de passe. De toute évidence, il est très dangereux si nous stockons directement des informations sensibles en texte clair dans le fichier de configuration de l'application Microservice. En réponse à ce problème, Spring Cloud Config offre la possibilité de crypter et de décrypter les propriétés pour protéger les informations du fichier de configuration. Par exemple, l'exemple suivant:
Spring.Datasource.Username = DidiSpring.Datasource.Password = {Cipher} DBA6505BAA81D78BD08799D8D4429DE499BD4C2053C05F029E7CFBF143695F5BDans Spring Cloud Config, le contenu est marqué comme une valeur cryptée en utilisant le préfixe {Cipher} devant la valeur d'attribut. Lorsque le client Microservice charge la configuration, le centre de configuration décrypte automatiquement la valeur avec le préfixe {cipher}. Grâce à la mise en œuvre de ce mécanisme, l'équipe de fonctionnement et de maintenance peut donner en toute sécurité les ressources cryptées des informations en ligne à l'équipe de microservice sans se soucier de la fuite de ces informations sensibles. Introduisons comment utiliser cette fonction dans le centre de configuration.
Prérequis pour une utilisation
Lorsque vous utilisez la fonction de chiffrement et de décryptage de Spring Cloud Config, il existe une condition préalable nécessaire à laquelle nous devons prêter attention. Pour activer cette fonctionnalité, nous devons installer une version JCE illimitée (extension illimité de cryptographie Java de force) dans le temps d'exécution du centre de configuration. Bien que la fonction JCE soit disponible en JRE, la version par défaut avec limitation de longueur est utilisée. Nous pouvons le télécharger à partir du site officiel d'Oracle. Il s'agit d'un package compressé. Après décompression, vous pouvez voir les trois fichiers suivants:
Readme.txtlocal_policy.jarus_export_policy.jar
Nous devons copier les fichiers local_policy.jar et us_export_policy.jar dans le répertoire $ java_home / jre / lib / security pour écraser le contenu par défaut d'origine. À ce stade, les préparatifs de chiffrement et de décryptage sont terminés.
Points de terminaison associés
Après avoir terminé l'installation de JCE, vous pouvez essayer de démarrer le centre de configuration. Dans la console, certains points de terminaison spécifiques au centre de configuration seront sortis, y compris principalement:
Vous pouvez essayer d'accéder au point de terminaison / Ecrypt / Status via la demande GET, et nous obtiendrons ce qui suit:
{"Description": "Aucune clé n'a été installée pour le service de chiffrement", "Status": "No_key"}Ce rendement indique que la fonction de chiffrement du centre de configuration actuel ne peut pas encore être utilisée car la clé correspondante n'est pas configurée pour le service de chiffrement.
Clé de configuration
Nous pouvons spécifier directement les informations clés (clé de symétrie) dans le fichier de configuration via la propriété encrypt.key, par exemple:
Encrypt.Key = Didispace
Après avoir ajouté les informations de configuration ci-dessus, redémarrez le centre de configuration et accédez au point de terminaison / Encrypt / statut. Nous obtiendrons le contenu suivant:
{"Status": "OK"}À l'heure actuelle, la fonction de chiffrement et de décryptage dans notre centre de configuration est prête à être utilisée. Vous pourriez aussi bien essayer d'accéder aux points de terminaison / crypt et / décrypt pour les fonctions de chiffrement et de décryptage. Notez que les deux points de terminaison sont des demandes de poste et que les informations de cryptage et de décryptage doivent être envoyées via le corps de la demande. Par exemple, en prenant la commande curl à titre d'exemple, nous pouvons appeler les points de terminaison de chiffrement et de décryptage de la manière suivante:
$ curl localhost: 7001 / Encrypt -d Didispace3C70A809BFA24AB88BCB5E1DF51CB9E4DD4B8FEC88301EB7A18177F1769C849AE9C9F29400C920480BE2C99406AE28C7 $ Curl LocalHost: 7001 / Decrypt -D 3C70A809BFA24AB88BCB5E1DF51CB9E4DD4B8FEC88301EB7A18177F1769C849AE9C9F29400C920480BE2C99406AE28C7DIDISPACE
Ici, nous utilisons le cryptage symétrique pour spécifier la méthode d'implémentation de la clé en configurant le paramètre encrypt.key. Cette méthode est relativement simple à implémenter et un seul paramètre est requis. De plus, nous pouvons également utiliser la variable d'environnement Encrypt_key pour les configurer pour permettre le stockage des informations clés en externe.
Cryptage asymétrique
Le centre de configuration de Spring Cloud Config peut non seulement utiliser le cryptage de symétrie, mais également le cryptage asymétrique (tels que les paires de clés RSA). Bien que la génération de clés et la configuration du chiffrement asymétrique soient relativement complexes, il a une sécurité plus élevée. Ci-dessous, introduisons en détail comment utiliser le cryptage asymétrique.
Tout d'abord, nous devons générer la paire de clés via l'outil Keytool. Keytool est un outil de gestion des clés et de certificat dans le JDK. Il permet aux utilisateurs de gérer leurs propres paires de clés publiques / privées et certificats connexes pour (via la signature numérique) auto-authentification (l'utilisateur s'authentifie à d'autres utilisateurs / services) ou des services d'intégrité et d'authentification de données. Cet outil est inclus dans les versions après JDK 1.4, et son emplacement est:% java_home% / bin / keytool.exe.
Les commandes spécifiques pour générer la clé sont les suivantes:
$ keytool -genkeypair -alias config-server -Keyalg RSA -Keystore config-server.keystore
Entrez le mot de passe du stade:
Entrez à nouveau le nouveau mot de passe:
Quel est votre nom et votre nom de famille?
[Inconnu]: Zhaiyongchao
Quel est le nom de votre unité organisationnelle?
[Inconnu]: Société
Quel est le nom de votre organisation?
[Inconnu]: Organisation
Quel est le nom de votre ville ou région?
[Inconnu]: Ville
Quel est le nom de votre province / ville / région autonome?
[Inconnu]: Province
Quel est le code de pays à deux lettres pour cette unité?
[Inconnu]: Chine
CN = Zhaiyongchao, ou = entreprise, o = organisation, l = ville, st = province, c = Chine correcte?
[Non]: YEntrez le mot de passe clé pour <config-server>
(Si le mot de passe est le même que le stage de touche, appuyez sur Entrée):
Entrez à nouveau le nouveau mot de passe:
De plus, si nous ne souhaitons pas saisir ces informations d'invite étape par étape, nous pouvons utiliser -DNAME pour le spécifier directement, tandis que le mot de passe de la clé et le mot de passe clé peuvent être spécifiés directement à l'aide de -Storepass et-KeyPass. Par conséquent, nous pouvons créer directement le même stade de clés que la commande ci-dessus via la commande suivante:
$ keytool -GenkeyPair -alias config-server -Keyalg RSA / -dname "cn = zhaiyongchao, ou = compagnie, o = organisation, l = ville, st = province, c = China" / -KeyPass 222222 / -KeyStore Config-Server.Keystore / -storepass 111111 /
Par défaut, la clé créée par la commande ci-dessus n'est valable que 90 jours. Si nous voulons ajuster sa période de validité, nous pouvons le faire en ajoutant le paramètre -validité. Par exemple, nous pouvons prolonger la période de validité de la clé à un an via la commande suivante:
$ keytool -genkeypair -alias config-server -Keyalg RSA / -dname "cn = zhaiyongchao, ou = compagnie, o = organisation, l = ville, st = province, c = china" /-keypass 222222 / -Keystore config-server.keystore / -storepass 111111 / -validité 365 /
Les trois méthodes de génération de commandes ci-dessus généreront éventuellement un fichier config-server.keystore dans le répertoire d'exécution actuel de la commande. Ensuite, nous devons l'enregistrer dans un emplacement dans le système de fichiers du centre de configuration, par exemple, le placer dans le répertoire utilisateur actuel, puis ajouter des informations de configuration pertinentes au centre de configuration:
encrypt.key-store.location = file: // $ {user.home} /config-server.keystoreencrypt.key-store.alias=config-serverencrypt.key-store.password=11111ncrypt.key-store.secret=222222Si nous plaçons le config-server.KeyStore dans le répertoire SRC / Main / Resource dans le centre de configuration, nous pouvons également le configurer directement comme ceci: encrypt.key-store.location = config-server.keystore. De plus, les informations de configuration du chiffrement asymétrique peuvent également être configurées via des variables d'environnement, et leurs noms de variables spécifiques correspondants sont les suivants:
Encrypt_key_store_locationencrypt_key_store_aliasencrypt_key_store_passwordcrypt_key_store_secret
La configuration des informations liées à des clés via des variables d'environnement peut obtenir une meilleure sécurité, il est donc un bon choix pour nous de stocker des informations de mot de passe sensibles dans les variables d'environnement du centre de configuration.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.