Prefacio
Para poder usarlo, primero debe entenderlo. Soy demasiado vago para dibujar fotos, así que puedo dibujar imágenes de los grandes en línea. La estructura de SpringCloud es la que se muestra en la figura:
Escenarios de aplicación de la arquitectura de microservicio:
1. Sistema dividido, múltiples subsistemas
2. Cada subsistema puede implementar múltiples aplicaciones, y se implementa el equilibrio de carga entre aplicaciones
3. Se requiere un centro de registro de servicio, y todos los servicios están registrados en el centro de registro. El equilibrio de carga también se logra mediante el uso de ciertas estrategias para servicios registrados en el centro de registro.
4. Todos los clientes acceden a los servicios de backend a través de la misma dirección de puerta de enlace. A través de la configuración de enrutamiento, la puerta de enlace determina qué servicio maneja una solicitud de URL. El equilibrio de carga también se usa al reenviar solicitudes al servicio.
5. A veces los servicios también deben acceder entre sí. Por ejemplo, hay un módulo de usuario, y otros servicios deben obtener datos de usuario de los servicios de usuarios al procesar algunos servicios.
6. Se necesita un interruptor de circuito para manejar tiempos de espera y errores durante las llamadas de servicio de manera oportuna para evitar que el sistema general se paralice debido a problemas con uno de los servicios.
7. También se necesita una función de monitoreo para monitorear el tiempo dedicado a cada llamada de servicio, etc.
introducción
En la arquitectura de microservicio, generalmente adoptamos el método de la organización DevOps para reducir los enormes costos causados por la comunicación entre los equipos para acelerar las capacidades de entrega de las aplicaciones de microservicios. Esto hace que la información en línea sea controlada originalmente por el equipo de operación y mantenimiento entregado a los miembros de la organización de microservicios para mantenerse para ellos, lo que incluirá una gran cantidad de información confidencial, como la cuenta de la base de datos y la contraseña. Obviamente, es muy peligroso si almacenamos directamente información confidencial en texto sin formato en el archivo de configuración de la aplicación de microservicio. En respuesta a este problema, Spring Cloud Config proporciona la capacidad de cifrar y descifrar propiedades para proteger la información en el archivo de configuración. Por ejemplo, el siguiente ejemplo:
spring.dataSource.username = didispring.datasource.password = {cipher} dba6505baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695f5bEn Spring Cloud Config, el contenido se marca como un valor cifrado utilizando el prefijo {cifrado} frente al valor del atributo. Cuando el cliente de microservicio carga la configuración, el centro de configuración descifrará automáticamente el valor con el prefijo {cifrado}. A través de la implementación de este mecanismo, el equipo de operación y mantenimiento puede otorgar los recursos cifrados de la información en línea al equipo de microservicios sin preocuparse por la fuga de esta información confidencial. Presentemos cómo usar esta función en el centro de configuración.
Prerrequisitos para su uso
Al usar la función de cifrado y descifrado de Spring Cloud Config, existe un requisito previo necesario al que debemos prestar atención. Para habilitar esta función, necesitamos instalar una versión JCE ilimitada (extensión de criptografía Java de fuerza ilimitada) en el tiempo de ejecución del centro de configuración. Aunque la función JCE está disponible en JRE, se utiliza la versión predeterminada con limitación de longitud. Podemos descargarlo desde el sitio web oficial de Oracle. Es un paquete comprimido. Después de la descompresión, puede ver los siguientes tres archivos:
Readme.txtlocal_policy.jarus_export_policy.jar
Necesitamos copiar los archivos locales_policy.jar y us_export_policy.jar al directorio $ java_home/jre/lib/seguridad para sobrescribir el contenido predeterminado original. En este punto, se completan los preparativos para el cifrado y el descifrado.
Puntos finales relacionados
Después de completar la instalación de JCE, puede intentar iniciar el centro de configuración. En la consola, se emitirán algunos puntos finales específicos del centro de configuración, principalmente que incluye:
Puede intentar acceder al punto final /encrypt /status a través de la solicitud Get, y obtendremos lo siguiente:
{"Descripción": "No se instaló ninguna clave para el servicio de cifrado", "Estado": "No_Key"}Este retorno indica que la función de cifrado del centro de configuración actual aún no se puede usar porque la clave correspondiente no está configurada para el servicio de cifrado.
Clave de configuración
Podemos especificar directamente la información de clave (clave de simetría) en el archivo de configuración a través de la propiedad CiCrypt.Key, por ejemplo:
cifrado.key = didispace
Después de agregar la información de configuración anterior, reinicie el centro de configuración y acceda al punto final /encrypt /status. Obtendremos el siguiente contenido:
{"estado": "ok"}En este momento, la función de cifrado y descifrado en nuestro centro de configuración está lista para ser utilizada. También podría intentar acceder a los puntos finales /encrypt y /descifrar para las funciones de cifrado y descifrado. Tenga en cuenta que ambos puntos finales son solicitudes posteriores, y la información de cifrado y descifrado debe enviarse a través del cuerpo de solicitudes. Por ejemplo, tomando el comando curl como ejemplo, podemos llamar a los puntos finales de cifrado y descifrado de las siguientes maneras:
$ curl localhost: 7001/encrypt -d didispace3c70a809bfa24ab88bcb5e1df51cb9e4dd4b8fec88301eb7a18177f1769c849ae9c9f29400c920480be2c99406e28c7 $ curl Localhost: 7001/Decrypt -D 3C70A809BFA24AB88BCB5E1DF51CB9E4DD4B8FEC88301EB7A181777F1769C8499AE9C9F29400C920480BE2C99406A8C7DIDISPACE
Aquí, utilizamos el cifrado simétrico para especificar el método de implementación de la clave configurando el parámetro CiCrypt.Key. Este método es relativamente simple de implementar, y solo se requiere un parámetro. Además, también podemos usar la variable de entorno encrypt_key para configurarla para permitir que la información clave se almacene externamente.
Cifrado asimétrico
El centro de configuración de Spring Cloud Config no solo puede usar el cifrado de simetría, sino también el cifrado asimétrico (como los pares de claves RSA). Aunque la generación de claves y la configuración del cifrado asimétrico son relativamente complejos, tiene mayor seguridad. A continuación, introduzcamos en detalle cómo usar el cifrado asimétrico.
Primero, necesitamos generar el par de claves a través de la herramienta KeyTool. KeyTool es una herramienta de gestión de clave y certificados en el JDK. Permite a los usuarios administrar sus propios pares de claves públicas/privadas y certificados relacionados para la autoautenticación (a través de la firma digital) (el usuario se autentica a otros usuarios/servicios) o servicios de integridad y autenticación de datos. Esta herramienta se incluye en las versiones después de JDK 1.4, y su ubicación es: %java_home %/bin/keytool.exe.
Los comandos específicos para generar la clave son los siguientes:
$ keyTool -GenKeypair -alias config -server -keyalg rsa -keystore config -server.keystore
Ingrese la contraseña del almacén de claves:
Ingrese la nueva contraseña nuevamente:
¿Cuál es tu primer y apellido?
[Desconocido]: Zhaiyongchao
¿Cuál es el nombre de su unidad organizacional?
[Desconocido]: Compañía
¿Cuál es el nombre de su organización?
[Desconocido]: organización
¿Cuál es el nombre de su ciudad o región?
[Desconocido]: Ciudad
¿Cuál es el nombre de su provincia/ciudad/región autónoma?
[Desconocido]: Provincia
¿Cuál es el código de país de dos letras para esta unidad?
[Desconocido]: China
¿Es CN = Zhaiyongchao, OU = Company, O = Organización, L = Ciudad, ST = Provincia, C = China correcta?
[No]: yIngrese la contraseña de clave para <Eftig-server>
(Si la contraseña es la misma que el almacén de teclas, presione ENTER):
Ingrese la nueva contraseña nuevamente:
Además, si no queremos ingresar esa información rápida paso a paso, podemos usar -dname para especificarla directamente, mientras que la contraseña del almacén de claves y la contraseña de llave se pueden especificar directamente usando -storspass y -keyPass. Por lo tanto, podemos crear directamente el mismo almacén de claves que el comando anterior a través del siguiente comando:
$ KeyTool -GenKeypair -alias config -server -keyalg rsa / -dname "cn = zhaiyongchao, ou = compañía, o = organización, l = ciudad, st = provincia, c = china" / -keypass 222222 / -keystore config -server.keystore / -storePass 111111 /
Por defecto, la clave creada por el comando anterior solo es válida por 90 días. Si queremos ajustar su período de validez, podemos hacerlo agregando el parámetro de validez. Por ejemplo, podemos extender el período de validez de la clave a un año a través del siguiente comando:
$ KeyTool -GenKeypair -Alias config -server -keyalg rsa / -dname "cn = zhaiyongchao, ou = compañía, o = organización, l = ciudad, st = provincia, c = china" / -keypass 222222 / -keystore config -server.keystore / -storePass 111111 / -validy 365 / -validy 365 / -keyS
Los tres métodos de generación de comandos anteriores eventualmente generarán un archivo config-server.keystore en el directorio de ejecución actual del comando. A continuación, necesitamos guardarlo en una ubicación en el sistema de archivos del centro de configuración, por ejemplo, colocarlo en el directorio de usuario actual y luego agregar información de configuración relevante al centro de configuración:
cifrypt.key-store.location = archivo: // $ {user.home} /config-server.keystoreencrypt.key-store.alias=config-serverencrypt.key-store.password=111111Encrypt.key-store.secret=222222Si colocamos el directorio config-server.keykey en el directorio SRC/main/de recursos en el centro de configuración, también podemos configurarlo directamente de esta manera: encrypt.key-store.location = config-server.keystore. Además, la información de configuración del cifrado asimétrico también se puede configurar a través de las variables de entorno, y sus nombres de variables específicos correspondientes son los siguientes:
CiCryPT_KEY_STORE_LOCATIONECRYPT_KEY_STORE_ALIASEnCrypt_Key_store_PasswordENCRYPT_KEY_STORE_SECROT
La configuración de la información relacionada con el almacén de claves a través de las variables de entorno puede lograr una mejor seguridad, por lo que es una buena opción para nosotros almacenar información confidencial de contraseña en las variables de entorno en el centro de configuración.
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.