¿Cómo puedo usar la firma cruzada X.509 para reemplazar una CA?

3

Tengo una CA autofirmada para la cual quiero rotar la clave. Quiero usar firma cruzada para facilitar esto, con reemplazo gradual del certificado en los clientes para que aún puedan comunicarse.

Estoy usando cfssl , pero no puedo averiguar prácticamente cómo hacer que esto funcione. Para fines de prueba, he generado dos nuevas CA con CN idénticas y las he firmado de forma cruzada:

cfssl gencert -initca ca-csr-A.json | cfssljson -bare ca-A
cfssl gencert -initca ca-csr-B.json | cfssljson -bare ca-B

cfssl sign -ca ca-A.pem -ca-key ca-A-key.pem -config ca-config.json ca-B.csr | cfssljson -bare ca-B-by-A
cfssl sign -ca ca-B.pem -ca-key ca-B-key.pem -config ca-config.json ca-A.csr | cfssljson -bare ca-A-by-B

Luego, he creado un nuevo certificado de cliente, firmado con la clave privada de A y el certificado A firmado por B:

cfssl gencert -ca=ca-A-by-B.pem -ca-key=ca-A-key.pem -config=ca-config.json child-csr.json | cfssljson -bare child

Luego traté de verificar (usando openssl verify ) el nuevo certificado de cliente con A original, B original o cualquiera de las CAs con firma cruzada, pero no puedo resolver el conjuro. He intentado agrupar ca-A-by-B.pem y ca-B.pem , y he intentado agrupar al cliente con ca-A-by-B.pem como intermediario, pero tampoco funcionan.

Creo que me falta algo obvio, o simplemente malentiendo completamente la firma cruzada. ¿Es esto posible?

    
pregunta boffbowsh 08.12.2018 - 18:27
fuente

1 respuesta

0

Estas respuestas pueden ser útiles:

Está bien, entonces la idea sería colocar los certificados cruzados en las tiendas fiduciarias de sus clientes para que durante la validación de certificados puedan construir desde la CA la ruta en la que no confían hasta la que hacen. >

Su escenario de prueba es que tiene un certificado de entidad final emitido por ca-A , y un verificador de cliente que solo confía en ca-B . También tiene un ca-A-by-B de certificado cruzado que puede entregar al cliente para que pueda crear una ruta entre los dos CA. Creo que el hechizo correcto de la línea de comando de openssl para simular sería:

  • -CAfile ca-B.pem para que ca-B esté "en el almacén de confianza".
  • -untrusted ca-A-by-B.pem para que el verificador se dé cuenta de que puede usar ese certificado para la creación de rutas, pero no lo considera una raíz confiable.
  • < (cat ca-A.pem child.pem) simula la recepción de un paquete cert que contiene el certificado de entidad final y su emisor (ca-A).

todos juntos:

openssl verify -verbose -CAfile ca-B.pem -untrusted ca-A-by-B.pem < (cat ca-A.pem child.pem)

En realidad no he intentado esto porque soy demasiado vago para generar certificados de prueba, pero hágame saber si es de ayuda (o si necesito hacer correcciones).

    
respondido por el Mike Ounsworth 09.12.2018 - 02:37
fuente