Autenticación mutua y autorización con certificados de varias CAs

0

Editar: Después de leer esta pregunta y respuesta Tengo un poco más de un entendimiento. Mi pregunta ahora es: ¿puedo usar un certificado que un usuario haya firmado por una CA registrada, como VeriSign, GoDaddy, etc., en lugar de firmar un certificado? Si es así, ¿qué mecanismo necesito usar para verificarlo? ¿CRL o OCSP tendrán detalles de todas las CA o tendré que revisar sus registros individuales?

Original: Me gustaría saber cómo verifico la validez de los certificados de varias entidades emisoras de certificados con fines de autenticación mutua en un sitio web, o si esto es incluso un problema que debe considerarse.

Estoy en el proceso de aprender sobre la autenticación mutua y cómo funciona, junto con la firma del certificado en general, por lo que se agradecería cualquier puntero o referencia para leer para entender este tema.

Actualmente tengo un servidor Ubuntu simple que se ejecuta en un VirtualBox que estoy usando para experimentar. Esto ejecuta nginx y mysql, los cuales están configurados para requerir TLS / SSL. El siguiente paso que quiero implementar es la autenticación mutua entre nginx y el navegador del cliente; Lo he configurado con éxito en el servidor utilizando un certificado CA autofirmado. Sin embargo, me cuesta entender cómo se verifica el certificado enviado por el navegador.

Tengo un par de claves pública / privada en el sistema operativo host, y posiblemente podría generar una solicitud de firma de certificado y enviarla al servidor invitado, que podría firmarla contra el certificado de CA y devolverla a mi host. Este certificado será firmado, pero no por una CA registrada. Yendo un paso más allá, ahora visito otro sitio web que no controlo: ¿es necesario que también firme mi certificado?

Entiendo que una vez que se haya firmado un certificado, no es necesario volver a firmarlo, excepto para la renovación. Esto solo es cierto si está firmado por una CA registrada, como GoDaddy, CACert, etc. Por lo tanto, volviendo a mi sitio web, ¿cómo puedo saber si se trata de un certificado válido? Si utilizo CRL o OCSP para verificar si ha sido revocado o no, ¿comprobará si hay todos los proveedores o solo la compañía que mantiene la lista / servidor?

Suponiendo que de una forma u otra puedo validar la autenticidad del certificado, ¿cómo lo utilizo para autenticar (o, supongo con más precisión, autorizar) al usuario específico? ¿Debo guardar una copia de su clave pública y verificar esto o es posible extraer algunos detalles únicos que me permitan autorizarlos?

Esta es un área nueva para mí y, sin duda, he hecho algunas suposiciones incorrectas y también he expuesto algunas lagunas en mi conocimiento y comprensión del tema. Apreciaría cualquier respuesta que ayude a corregir esto. Además, si la pregunta no es lo suficientemente específica para las reglas del foro, me disculpo y cualquier orientación sobre cómo encuadrarlo mejor para que no viole las reglas sería útil.

    
pregunta Ashley Bye 17.01.2016 - 18:05
fuente

1 respuesta

2

La autenticación mutua / cliente a través de certificados no es una configuración común, por lo que es posible que no encuentre mucha información sobre este tema, por ejemplo para nginx , como podría esperar.

Dicho esto, preguntaste:

  • "¿Puedo usar un certificado que un usuario haya firmado por una CA registrada como VeriSign, GoDaddy, etc., en lugar de firmar yo mismo un certificado?"

Sí. Supongamos que su cliente tiene un certificado, emitido por una de las CA anteriores. Para que ese cliente envíe su certificado a su servidor ( por ejemplo nginx ), debe configurar su servidor con una lista de entidades de certificación en las que confiará. Como parte del protocolo de enlace SSL / TLS, el servidor "solicita" que el cliente envíe su certificado de cliente enviando al cliente una lista de las entidades emisoras de certificados en las que el servidor confía; luego, el cliente puede elegir un certificado (posiblemente entre varios) que tenga una "ruta de confianza" para aquellos de aquellas CA en las que el servidor confía.

Esto significa que en el extremo del servidor, puede configurar la lista de CA en las que confía, utilizando sus certificados (y claves públicas); no necesita las claves privadas de las CA para esto.

  • "Si es así, ¿qué mecanismo debo usar para verificarlo? ¿CRL o OCSP tendrán los detalles de todas las CA o tendré que verificar sus registros individuales?"

Bien, aquí es donde las cosas pueden ser un poco difíciles. La respuesta práctica a esta pregunta es "depende del software / aplicación que esté utilizando". Dado que la autenticación mutua / cliente no es muy común, muchas aplicaciones pueden no tener implementada la funcionalidad CRL / OCSP para la verificación del certificado de cliente . Pero supongamos, por el bien de la discusión, que nginx (o mysql ) puede hacer esto.

Dentro de un certificado X509v3 en sí, hay extensiones que definen dónde encontrar las CRL para verificar ese certificado y / o para definir el respondedor OCSP con el que contactar para la verificación.

Las CRL relevantes para el certificado presentado deben definirse, en ese certificado, por los puntos de distribución de CRL extensión. Hay muchos formatos posibles para esta extensión; La documentación enlazada del RFC 5280 va en detalles. Pero esta extensión, si está presente, es lo que buscaría cualquier software (como el servidor de su sitio web) para descubrir dónde y cómo obtener cualquier CRL que pueda mencionar este certificado.

La URL para que el respondedor de OCSP se ponga en contacto, por ejemplo, puede aparecer en "acceso a información de autoridad" extensión del certificado. Por ejemplo, al utilizar openssl x509 -noout -text < /path/to/cert.pem en un certificado, es posible que vea que se muestra así:

Certificate:
    Data:
        Version: 3 (0x2)

        ...

        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE

            ...

            Authority Information Access: 
                OCSP - URI:https://ocsp.example.com

Por lo tanto, el servidor en cuestión tiene que analizar estos atributos / extensiones del certificado proporcionado por el cliente para descubrir a quién contactar, para ese certificado, para obtener los CRL o los datos de OCSP para ese certificado. En la mayoría de los casos, las CA que firman / emiten los certificados también serán las organizaciones que mantienen los CRL y / o los respondedores de OCSP para esos certificados.

Espero que esto ayude!

    
respondido por el Castaglia 17.02.2016 - 06:07
fuente

Lea otras preguntas en las etiquetas