certificados de entidad final con firma cruzada: uso en apache / openssl / gnutls

0

Una pregunta anterior, Qué ¿El uso de certificados de firma cruzada en X.509? se describe bien en los certificados firmados.

Tengo una situación en la que los clientes confían en CA1 xor CA2, y ambos necesitan llegar a un solo servicio. Lógicamente, esto significa que necesito dos certificados de entidad final para el mismo nombre de host. A partir de una sola clave SSL, generé un solo CSR y lo envié a ambas CA, y obtuve los dos certificados de entidad final separados.

Configuré a Apache para que sirviera los certificados juntos y todos los intermedios relevantes en la cadena.

Lo que me ha dejado perplejo es la posibilidad de que Apache mod_ssl se bloquee con fuerza con [Tue Nov 25 15:28:35 2014] [error] Init: Multiple RSA server certificates not allowed'

s_server de OpenSSL lee múltiples -cert , -dcert argumentos, toma el primer certificado RSA en el último argumento.

Usando GnuTLS a través de mod_gnutls o directamente, toma solo el último certificado o reclama The provided X.509 certificate list is not sorted (in subject to issuer order)

Creo que, leyendo RFC4158, lo que estoy tratando de hacer debería ser válido. ¿Dónde me he equivocado? ¿Por qué la firma cruzada solo parece ser válida entre los certificados intermedios y raíz?

No hay ninguna posibilidad de diferenciar entre los clientes, así que no puedo hacer trampas y ejecutar diferentes vhosts en diferentes IP (los clientes comparten el DNS). Tampoco tengo control sobre cómo obtener ambas CA en los clientes. La única solución de trabajo que tengo hasta ahora es empujar a cada grupo de clientes a un único nombre de host fuera de banda.

    
pregunta robbat2 26.11.2014 - 03:18
fuente

2 respuestas

1

openssl s_server -cert -dcert solo es útil si los certificados (y las claves coincidentes -key -dkey ) son algoritmos diferentes . Entonces usará, por ejemplo, la clave RSA & cert para cambio de clave simple RSA o DHE-RSA, pero la clave DSS y cert para DHE-DSS. Y de manera similar para ECDSA y ECDHE-ECDSA ahora que se admite ECC (desde la versión 1.0.0 excepto para RedHat).

Apache parece ser el mismo. enlace dice

  

Esta directiva se puede usar varias veces (haciendo referencia a diferentes nombres de archivos) para admitir múltiples algoritmos para la autenticación del servidor, generalmente RSA, DSA y ECC. ...

y #sslcertificatekeyfile dice

  

La directiva se puede usar varias veces (haciendo referencia a diferentes nombres de archivo) para admitir múltiples algoritmos para la autenticación del servidor. Para cada directiva SSLCertificateKeyFile, debe haber una directiva SSLCertificateFile coincidente.

Esto solo ayudaría si puede hacer que sus clientes habiliten / deshabiliten diferentes cambios de clave según la CA que quieren que use, lo que probablemente sea más difícil y confuso que usar diferentes nombres de host.

En realidad, hay una extensión estándar definida para TLS1.0 por 3546 TLS1.1 by 4366 TLS1.2 por 6066 para que el cliente identifique en qué CA confía y le gustaría que usara el servidor. Pero la mayoría de las extensiones son opcionales y en la medida en que no he visto ningún navegador (o cliente) implementa este.

    
respondido por el dave_thompson_085 27.11.2014 - 06:50
fuente
0

Leí la especificación TLS1.2 para permitir que se envíe SOLAMENTE UNA CADENA .:
enlace

certificate_list
      This is a sequence (chain) of certificates.  The sender's
      certificate MUST come first in the list.  Each following
      certificate MUST directly certify the one preceding it.
    
respondido por el StackzOfZtuff 26.11.2014 - 20:37
fuente

Lea otras preguntas en las etiquetas