Integración de Nginx y HSM para mantener claves privadas

17

Estamos utilizando Nginx y almacenando claves privadas en un archivo en el servidor. Nos gustaría transferir claves privadas a HSM para que las claves SSL se almacenen en HSM y nunca se salgan de HSM. Todas las operaciones de cifrado requeridas durante la terminación de SSL se pueden realizar en HSM.

Después de Heartbleed, hemos visto muchos artículos que sugieren el uso de HSM, pero no pudimos encontrar cómo se puede habilitar / agregar a Nginx. Durante algunas búsquedas, encontramos un parche que permite que Keyform del motor lea claves privadas del motor enlace . Pero en lugar de leer las claves de un motor compatible con PKCS # 11, nos gustaría usar HSM para realizar todas las operaciones de cifrado para que las claves SSL nunca salgan de HSM.

¿Existe algún complemento / módulo / implementación de Nginx / OpenSSL que pueda ayudarnos a lograr esto? He visto muchos artículos que hablan sobre la terminación SSL usando HSM, pero no pude encontrar ningún detalle de implementación. Entonces, antes de comenzar a indagar en el código Nginx / OpenSSL, me gustaría saber si alguien tiene alguna sugerencia o recomendación para este problema.

    
pregunta GG01 11.06.2015 - 14:38
fuente

3 respuestas

4

Nunca he hecho esto antes. Pero aquí hay algunos consejos sugerentes. Estos puntos NO son pasos concretos para que funcione. De la documentación para el nuevo AWS CloudHSM (no clásico) que ofrece:

  1. Configure CloudHSM y genere la clave privada usando la utilidad CLI.
  2. Instale y configure la biblioteca CloudHSM OpenSSL.
  3. Comprueba si el motor funciona openssl engine -t cloudhsm
  4. Configurar Nginx. Desde Nginx 1.7.9, puede especificar un motor para las claves privadas
  

El motor de valores: nombre: id se puede especificar en lugar del archivo (1.7.9), que carga una clave secreta con una id especificada desde el nombre del motor OpenSSL.

Entonces, su configuración nginx se vería así:

ssl_certificate_key cloudhsm:<name>:<keyid>;

No estoy seguro de cuál sería el nombre o el ID de clave. Voy a leer un poco y edita esta respuesta si encuentro algo.

Nota: también, según la documentación , es posible que tenga que configurar ssl_engine to cloudhsm si desea habilitar la aceleración SSL (haciendo el criptografía en el HSM).

ssl_engine cloudhsm;
  1. prueba.

¿Puedo preguntar por qué no querría descargar su SSL en los equilibradores de carga usando AWS ACM? Es la forma más fácil de hacerlo y es segura si confía en que AWS sea seguro.

edit: leí un poco y estoy más o menos seguro de que el Key Handle en el lenguaje de CloudHSM, el identificador numérico de 6 dígitos, es el keyid aquí. También creo que user name es la parte name . Entonces su configuración de Nginx podría ser:

# something that looks like:
ssl_certificate_key cloudhsm:AWSUser:568900;

edit2: la compilación de Nginx no es necesaria. Solo tenemos que asegurarnos de que el motor openssl sea cargable. Una vez configurado, esto es lo que parece cuando se verifica:

[root@ip-172-31-14-127 ~]# export n3fips_password=user_cu:Wzs8sukUp7FkVs4xQU
[root@ip-172-31-14-127 ~]# openssl engine -t cloudhsm
(cloudhsm) CloudHSM hardware engine support
     SDK Version: 2.03
[ available ]

edit3: ¡Buenas noticias! Según esta publicación del foro , Amazon está trabajando en una mejor documentación para la integración de Nginx con CloudHSM .

edit4: AWS ha actualizado su documentación para incluir instrucciones para Apache y Nginx. ¡Parece que lo tengo un poco bien! ;) Entonces, aparentemente, descargas una "clave privada falsa" y la usas en tu configuración de Nginx. El resto de las instrucciones se mantienen bien.

  

Independientemente del método que elija, luego exporta una clave privada   manejar desde los HSM y guardarlo en un archivo. El archivo no contiene   la clave privada real. Contiene una referencia al mango de la   Clave privada que se almacena en los HSM. Los contenidos del archivo son conocidos.   como una falsa clave privada de formato PEM. Su software de servidor web utiliza la   archivo de clave privada falso en formato PEM, junto con el software AWS CloudHSM   biblioteca para OpenSSL, para descargar el procesamiento SSL o TLS a los HSM en   tu grupo

Documentación aquí: enlace

No he probado esto todavía. Publicaré una actualización una vez que lo haga.

    
respondido por el eternaltyro 09.09.2017 - 10:21
fuente
0

A medida que usa Safenet (ahora Gemalto) Luna HSM SA 7000. Podría agregar una capa de abstracción para el Servicio de administración de claves. Por ejemplo, Key Secure Appliance de Gemalto (ellos hacen su dispositivo virtual).

KMS se integra con HSM. Debe registrar el servicio de administración de claves con HSM, entonces cada una de las transacciones de KMS se ajustará con una clave maestra que se encuentra en una de las particiones registradas en su HSM.

Trabajé en HSM y KeySecure, pero nunca hice la terminación SSL. Para comenzar, si pudiera probar SSL con KMS (sin HSM), puedo ayudarlo con el resto de las integraciones.

    
respondido por el Karthik tv 10.09.2017 - 17:28
fuente
0

Para el beneficio de cualquier otra persona que haya encontrado esta publicación a través de Google "cloudhsm nginx" como yo: la respuesta de @eternaltyro es casi correcta. Pero en lugar de hacer referencia a la ID de clave en el formato cloudhsm:<name>:<keyid>; , utiliza la función getCaviumPrivKey en key_mgmt_util para exportar la clave como un archivo PEM "falso", luego apunte el nginx ssl_certificate_key a ese archivo. También debe establecer ssl_engine en cloudhsm como se indica.

    
respondido por el Wintermute 12.10.2017 - 22:34
fuente

Lea otras preguntas en las etiquetas