¿Debería tener 3 CA raíz, 1 CA raíz + 3 intermedias o alguna otra configuración de PKI para la siguiente situación?
Tengo tres casos de uso:
- Exponer una API web a través de HTTPS (certificados de servidor)
- Permitir que los clientes se autentiquen con un certificado de cliente en lugar de un nombre de usuario/contraseña (certificados de cliente externos)
- Validar servidores internos como clientes (certificados de cliente interno)
Cada par de claves se utilizará exactamente para uno de los casos de uso.
Supongamos que no necesito una CA de terceros y, en cambio, estoy trabajando con una PKI personalizada en un sistema cerrado. Puedo ver dos formas principales de apoyar esto:
- 1 CA raíz con 3 CA intermedias (una intermedia para cada caso)
- 3 CA raíz (una raíz para cada caso de uso)
Intenté comenzar con el n.° 1, pero descubrí que para tener openssl s_client
certificados de cliente de prueba en un servidor HTTPS de node.js, necesito validar desde el intermedio hasta la raíz, no solo el intermedio. Lo que significa que los certificados de cliente entre los casos de uso 2 y 3 se pueden intercambiar ya que la raíz es el ancla de confianza. He buscado a mi alrededor, pero no puedo encontrar una manera de hacer que la CA intermedia sea el ancla de confianza para el servidor HTTPS de node.js.
Entonces, estoy entendiendo muy mal algo, necesito pasar a la implementación n.° 2, o una combinación de cosas.
Respuesta1
Los certificados X.509 pueden proporcionar confidencialidad y autenticación. Es decir, se pueden utilizar en el cifrado de un enlace y, opcionalmente, para autenticar al usuario o servidor.
No dan autorización. En cambio, depende de la aplicación considerar si la entidad que se ha autenticado con un certificado X.509 tiene permiso para acceder a los recursos.
Eso significa que el punto (1) anterior está bien. Utilice una raíz y asegúrese de que la autorización se realice por otro medio.
Sin embargo, si insiste en que los certificados X.509 también proporcionen autorización, deberá:
- Confíe en las políticas de certificados para garantizar que las aplicaciones sólo confíen en ciertos certificados; buena suerte con ese, ya que probablemente necesitará codificar sus propias aplicaciones que verifiquen las políticas;
- Utilice un certificado raíz diferente para cada aplicación; como en (2) arriba.