Spring Cloud ofrece a los desarrolladores una variedad de herramientas para construir rápidamente modelos comunes de sistemas distribuidos. Por ejemplo: gestión de configuración, descubrimiento de servicios, fuera de rutas, enrutamiento inteligente, microgentes, bus de control, tokens únicos, cerraduras globales, campañas de toma de decisiones, sesiones distribuidas, estado del clúster, etc. La asistencia de los sistemas distribuidos requiere una gran cantidad de modelos y los desarrolladores que utilizan Spring Cloud pueden establecer rápidamente servicios y aplicaciones que apoyan estos patrones. Serán adecuados para cualquier entorno distribuido, ya sea la computadora personal o el entorno de producción de un desarrollador, o una plataforma en la nube.
característica
Spring Cloud se centra en proporcionar soluciones típicas y formas escalables que son buenas fuera de la caja.
Introducción
El cifrado asimétrico RSA tiene una seguridad muy fuerte. El cifrado HTTPS SSL utiliza este método para cifrar y transmitir solicitudes HTTPS. Debido a que el algoritmo RSA implica clave privada y clave pública para el cifrado y el descifrado, se llama cifrado asimétrico. La clave privada y la clave pública son interoperables, es decir, las encriptadas con la clave privada se pueden descifrar con la clave pública, y las encriptadas con la clave pública se pueden descifrar con la clave privada. La autenticación tradicional unidireccional solo usa la clave pública para el cifrado, y solo aquellos con la clave privada pueden descifrar. Por ejemplo, un servidor web tendrá un par de claves privadas y claves públicas. El cliente del navegador guarda la clave pública del servidor. Cuando el cliente necesita enviar datos al servidor, utiliza la clave pública del servidor para cifrarlo. Luego, cuando el servidor recibe los datos, utiliza la clave privada para descifrarlo. Cuando el cliente verifica si el servidor es un servidor real, comparará la clave pública proporcionada por el servidor con la clave pública guardada localmente. Solo si es consistente se puede verificar la autenticidad del servidor.
En nuestro servidor de configuración, algunos de los datos que tienen altos requisitos de cifrado pueden encriptarse y descifrarse utilizando el algoritmo RSA.
Código fuente del proyecto
Nube de código de gitee
Generar el almacén de claves de prueba
Necesitamos utilizar la herramienta KeyTool que viene con JDK para generar un almacén de claves, que guarda la información de clave privada y usar la siguiente línea de comando:
KeyTool -Genkypair -alias config -server -key -keyalg rsa -dname "cn = config servidor, ou = xuqian, o = mi propia empresa, l = beijing, s = beijing, c = cn" -keypass cambiait
-Keystore Server.jks -StorePass Changeit
El parámetro -GenKeypair genera un par de claves públicas y claves privadas.
-Alias especifica el alias de la clave, que se utiliza para distinguir diferentes claves en el mismo almacén de claves.
-KeyAlg especifica el algoritmo para generar claves, y el RSA predeterminado se usa aquí
-dName especifica el nombre común, es decir, CN, para verificar la identidad de la clave. Todos los elementos son parámetros personalizados, OU es el nombre de la unidad, o es el nombre de la organización, l es la ciudad, s es la provincia/estado y c es el país
-Keypass es la contraseña para la clave
-KeyStore es el nombre del archivo del almacén de claves
-Sear la contraseña para acceder al almacén de claves
La herramienta anterior guarda la clave privada generada en una tienda de clave llamada servidor.jks. Hasta ahora, solo hemos generado claves privadas. Spring Cloud Config Server generará una clave pública utilizando el programa cada vez en función de la información clave que proporcionamos. Consulte el código fuente a continuación.
org.springframework.security.rsa.crypto.keystorekeyFactory:
public keyPair getKeyPair (alias de cadena, char [] contraseña) {try {sincronizado (bloqueo) {if (store == null) {sincronizado (bloqueo) {// Obtenga el objeto de instancia del almacén de claves basado en la dirección del archivo del almacén de claves y la contraseña proporcionada por la configuración = keystore.getInstance ("jks"); store.load (recurse.getInputStream (), this.password); }}} // Obtener la clave privada del almacén de claves en función del alias y la contraseña proporcionados por la configuración rsaprivateCrtkey clave = (rsaprivateCrtkey) store.getkey (alias, contraseña); // Definir las reglas de generación de clave pública rsapublicKeySpec Spec = new rsapublicKeySpec (key.getModulus (), key.getPublicExponent ()); // Generar la clave pública publickey publickey = keyFactory.getInstance ("RSA"). GeneratePublic (Spec); devolver nuevo KeyPair (PublicKey, Key); } Catch (Exception e) {Throw New IlegalStateException ("No se puede cargar claves de la tienda:" + recurso, e); }}La API de seguridad Java se usa aquí para operar en la clave. Ver notas. Luego se proporciona la información anterior a través del archivo de configuración bootstrap.xml en configServer:
cifrado: #key: thisismysecretkey key-store: ubicación: archivo: // $ {user.home} /develovelopment/keys/server.jks contraseña: cambio alias: config-server-skey secret: cambiar de cambioDebido a que no podemos usar el cifrado simétrico y el cifrado asimétrico, comentamos la configuración de cifrado y especificamos los parámetros para el cifrado asimétrico:
prueba
Continuamos encriptando los datos de prueba utilizando la API CiCrypt:
curl http: // localhost: 8888/encrypt -d 23456789
Devuelve los caracteres cifrados:
AQAPWOUOH4WVEXGGVV+BGTKC5E0D5ABA8VUKNZEXH27HYKSABW+WYZDWZTBK5QYFXPOCAS413RDENIDR2EZ44NKJT5V+438/ VqExyszjzzP0xyxi9yiaJqa3+ji+iwk8hrgtj4dzxikMitimcoirldzzzgdm/yklmuvh7larsnumxxgklpdbpkywdqhm57ob 6SB0IVM4H4ML1N4D3QUCUE7HH2F4AW4OLN7XUEMKRPTTPY8OPNBEEZHRFMAL/AUVZQULU5JJMNJK9JIWOY+DSTSCVIY/MZ+D YPV6F4AFDDVVOG89SNMPZCUT+ZMB8JXHDJLOKY+63RG326WFFY9OPUIMW6/KCWZHV6VWS55HHQRY713W6YDBLRQ/GYC3WILS =
Luego prueba el descifrado
curl http: // localhost: 8888/Decrypt -d AQAPWOUOH4+BGTKC5E0D5ABA8VUKNZEXH27HYKSABW+WYZDWZTBK5QYFXPOCAS413RDENIDR2EZ44NKJT5V+438/VQEXYS ZJZPHP0XYXI9YIAJQA3+JI+IWK8HRGTJ4DZXIKMITIMCOIRDZZZGDM/YKLMUVH7LARSNUMXXGKLPDBPKYWDQHM57OB6SB0 IVM4H4ML1N4D3QUCUE7HHH2F4AW4OLN7XUEMKRPTTPY8OPNBEEZHRFMAL/AUVZQULU5JJMNJK9JIWOY+DSTSCVIY/MZ+DYP V6F4AFDDVVOG89SNMPZCUT+ZMB8JXHDJLOKY+63RG326WFFY9OPUIMW6/KCWZHV6VWS55HQRY713W6YDBLRQ/GYC3WILS =
Volverá
23456789
También podemos modificar web-client.yml para verificar:
#test: #password: '{cipher} 94c1027141add9844ec47f0be13caebb6b38ed1dcf99811b1a5cd2b874c64407'user: contraseña::: '{cipher} aqapwoUoh4wvexggvv+bgtkc5e0d5aba8vuknzexh27hyksabw+wyzdwztbk5qyfxpocas413rdenidr2ez44nkjt5 V+438/vqExyszjzzpp0xyxi9yiaJqa3+ji+iwk8hrgtj4dzxikmitimcoirldzzzgdm/yklmuvh7larsnumxxgklpdbpkywdqhmm 57OB6SB0IVM4H4ML1N4D3QUCUE7HHH2F4AW4OLN7XUEMKRPTTPY8OPNBEEZHRFMAL/AUVZQULU5JJMNJK9JIWOY+DSTCVIY/MZ +dypv6f4afddvvog89snmpzcut+zmb8jxhdjloky+63rg326wffy9opuimw6/kcwzhv6vws55hhqry713w6ydblrq/gyc3wils = ''Comente test.password y agregue un nuevo usuario.password para usar el valor de configuración cifrado. Luego envíe el repositorio de GITEE y acceda a este archivo de configuración a través de la URL:
http: // localhost: 8888/web-client/default
Se obtienen los siguientes resultados:
{"name": "web-client", "perfiles": ["predeterminado"], "etiqueta": null, "versión": "3044a5345fb86d09a043ca7404b9e57c8c13c512", "estado": null, "propiedad de propiedad "https://gitee.com/zxuqian/spring-cloud-config-remote/web-client.yml", "fuente": {"mensaje": "Este mensaje proviene del repositorio de configuración remota", "administración.endpoints.web.Expunure.include": "*", "user.password": "23456789"}]Resumir
Lo anterior es la introducción de Spring Cloud Config RSA y el método de usar RSA para cifrar archivos de configuración que el editor le presentó. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!