[CERTIFICADOS] Campo SAN es eliminado al firmar con subca

willy_chaos

Hola a todos, no sabía si poner el post aquí o en Hardware>Unix

Estoy haciendo pruebas para crear una ROOT CA + SUB CA con OpenSSL.

Actualmente tenemos todo el sistema montado con Windows con la entidad de Certificacion que trae la propia Windows:

  • Root CA: fuera de dominio y apagada
  • Sub CA: Integrada en dominio y es la que también proporciona la web con los CRL, además de tener las plantillas para que los equipos de dominio soliciten y se genere automáticamente su certificado.

Mi idea es reproducir el entorno pero con Linux y Openssl. Almenos mi primer objetivo es para las webs internas.

He seguido este tutorial https://jamielinux.com/docs/openssl-certificate-authority/ y todo funciona bien.

Problema con campo Subject Alternative Name (SAN)

  • Creo la Root CA y la autofirmo
  • Creo la Subca, la firmo con la Root y verifico que la cadena de certificacion sea correcta -> OK
  • Creo el certificado de la web
openssl req -nodes -new -newkey rsa:4096 \
	-keyout test3.psc.local.key \
	-out test3.psc.local.csr \
	-addext "subjectAltName = DNS:test3.psc.local" \
	-subj "/C=ES/ST=Barcelona/L=Barcelona/O=GRG-CA/OU=GRG-CA/[email protected]/CN=test3.psc.local/"

Si reviso el CSR generado, veo que aparece el campo Subject Alternative Name con el nombre DNS (ya que se lo he indicado en el comando anterior con el -addext.

spoiler

Sin embargo a la hora de firmarlo desaparece

root@PSC-CA-SUB:~/ca# openssl ca -config intermediate/sub-ca-openssl.cnf     \
         -extensions server_cert    \
          -days 375 -notext -md sha512     \
         -in /root/ca/test3.psc.local.csr     \
         -out /root/ca/test3.psc.local.crt
spoiler

Esto es un problema, porque Firefox desde la version 101 usa este campo para marcar el certificado como fiable (obviamente comprobando también toda la cadena). Edge y Chrome más de lo mismo... solo Internet Explorer 11 lo acepta aunque no disponga de este campo. Obviamente me interesa que lo reconozcan los navegadores correctamente.

Actualmente con la de Windows lo hace, supongo que no eliminará dicho campo y por lo tanto los certificados quedan bien firmados.

Contenido del fichero de config de openssl para la subca

spoiler

He visto que hay gente que indica que a la hora de firmar, se añada un fichero con los alternative Names del dominio a firmar, pero me parece un poco feo si ya viene en el CSR tener que generar una config para cada firma que tenga que hacer... cosa que con el sistema de Windows no es necesario. No se si hay alguna forma de decirle que el campo SAN lo copie del fichero CSR (o almenos que no lo elimine)

He visto que otros dicen que se ponga un

extensions = copy

sin embargo por lo que leo en las respuestas, lo desaconsejan porque si alguien envia un certificado con CA:TRUE aunque fuera para un web server, estaría firmandole como subca... y aunque por lo general va a ser para uso interno, me gustaría dejarlo bien hecho

willy_chaos

Edit: Solved

neil90

Recomendación: Si es para administrar certificados de forma no programática, usa xCA: https://hohnstaedt.de/xca/

1 respuesta
willy_chaos

#3 por un lado también era por learning, pero me miro también el que propones.

1 1 respuesta
neil90

#4 Ahora que ya conoces las tripas habiéndote pegado con OpenSSL, creo que preferirás este por pura comodidad

JuAn4k4

Por aquí dicen de generar el request con -x509 https://security.stackexchange.com/questions/150078/missing-x509-extensions-with-an-openssl-generated-certificate
Si funciona me parece lo más adecuado.

Otro copia a mano del csr al signed que me parece un hack arriesgado.l y otros usan la opción copy que mencionas que es insegura.

Usuarios habituales

  • JuAn4k4
  • neil90
  • willy_chaos