Uso de certificados autofirmados para la autenticación del cliente

4

Tenemos un escenario de comunicación de servidor a servidor, donde usaríamos un certificado firmado por CA para la autenticación del servidor TLS y nos gustaría usar un certificado autofirmado para la autenticación del cliente.

¿Hay alguna seguridad adicional que obtendría al utilizar un certificado firmado por la CA en comparación con el uso del certificado autofirmado en este caso (autenticación del cliente)?

ACTUALIZADO Estamos importando los certificados de cliente relevantes en el almacén de confianza del servidor / lista blanca. Dado este contexto, ¿el certificado firmado por CA ofrece algún beneficio de seguridad adicional?

    
pregunta mithrandir 05.09.2017 - 02:42
fuente

1 respuesta

7

[Esta es una reescritura de la pregunta que aborda la actualización. Consulte el original en el historial de revisión ]

La autenticación del cliente TLS es algo que casi siempre requiere que extienda su motor TLS al escribir su propio código de validación personalizado cert en el extremo del servidor. Parece que has evitado esto compitiendo con el almacén de confianza sin un código de validación adicional.

La pregunta clave es:

  

Cuando sus servidores están verificando el certificado del cliente, ¿cómo saben que es un certificado emitido por usted y no un certificado emitido por un malvado?

Usted dice:

  

Estamos importando los certificados de cliente relevantes en el almacén de confianza / lista blanca del servidor.

Esto podría estar bien en cuanto a seguridad. La primera pregunta que debe hacerse es qué más hay en el almacén de confianza del servidor y si aceptará conexiones de certificados que no sean las que incluyó en la lista blanca. ¿Estamos hablando del almacén de confianza del sistema operativo que contiene todas las CA raíz de confianza pública, o es este un almacén de confianza de Java personalizado que está vacío antes de que inserte su lista blanca? Por ejemplo, si el CA Let's Encrypt público está en el almacén de confianza, cualquier persona con un certificado de Let's Encrypt podría obtener una conexión a su servidor.

Básicamente, desea convencerse de que los certificados autofirmados que creó son los certificados solamente que podrán establecer una conexión con el servidor. He visto productos que funcionan de esta manera, por lo que no es del todo inverosímil, y la seguridad adecuada es posible, sin embargo, hay algunas otras cosas en que pensar. Primero hablemos de la forma habitual en que está configurado, luego compararé.

Por lo general, , la forma en que el cliente-auth funciona en una situación como esta es una de las dos formas siguientes:

CA privada

Tienes una CA privada que controlas. Sólo emite certificados para clientes TLS válidos. Por lo tanto, el servidor TLS puede simplemente verificar que el cliente presenta un certificado emitido por esta CA, y usted sabe que es auténtico.

CA pública

Sus clientes obtienen certificados de una CA de confianza pública como Let's Encrypt. De repente, solo comprobar que el certificado fue emitido por Let's Encrypt no es lo suficientemente bueno porque la mitad de Internet tiene un certificado como ese, por lo que no prueba nada. Aquí, desea que su "servidor TLS" mantenga una lista blanca de nombres de dominio de los "clientes TLS". Al validar un certificado de cliente, además de todas las comprobaciones de validez habituales, debe ser que el DN del certificado coincida con un nombre de dominio en su lista blanca.

Comparación de cert-whitelisting vs CA whitellisting

  • Revocación : normalmente, como parte de la validación de un certificado, se puede configurar un motor TLS para verificar con la CA para asegurarse de que no se revoque un certificado. Si uno de los servidores de su cliente está comprometido, puede revocar fácilmente el certificado en la CA y todas las conexiones posteriores de ese certificado serán rechazadas. En un modelo de lista blanca de certificados, aún puede hacer esto eliminando el certificado del almacén de confianza. Un poco más manual, pero igualmente posible. Dado que esto no es estándar, asegúrese de tener un procedimiento documentado para hacerlo.
  • Manual y propenso a errores : con una configuración de CA, solo necesita importar el certificado de CA una vez en el punto final de TLS, luego puede emitir / revocar tantos certificados como desee y los puntos finales de TLS inmediatamente comience a aceptar / rechazarlos adecuadamente sin ninguna configuración adicional. Con su configuración, tendrá que modificar manualmente el almacén de confianza del servidor TLS cada vez que quiera poner de pie o retirar una máquina cliente TLS. Evitar la configuración de CA puede parecer menos trabajo ahora, pero piense en el trabajo adicional a largo plazo, y el riesgo adicional de un administrador de sistemas en la línea que no comprende realmente cómo funciona esta cosa no estándar y hacer que se abra la seguridad. Ejemplo agregando una CA de confianza pública al almacén de confianza del Servidor sin darse cuenta de las implicaciones. Una vez más, es posible, pero asegúrese de documentar los procedimientos con mucho cuidado.

Resumen

El objetivo de seguridad que desea es que sus clientes TLS (y solo sus clientes TLS) puedan establecer conexiones con sus servidores TLS. Ciertamente puedes lograr esto con el sistema que describiste. La configuración inicial será más sencilla, pero predigo que a largo plazo la complejidad operativa adicional volverá a morderlo, ya sea en términos de tiempo y esfuerzo adicionales, o cuando no haya sido necesario modificarlo durante tanto tiempo. Nadie recuerda cómo funciona. ¡Asegúrese de preparar la documentación completa sobre cómo funciona!

    
respondido por el Mike Ounsworth 05.09.2017 - 03:48
fuente

Lea otras preguntas en las etiquetas