Agregar nombres alternativos de sujeto (SAN) a una solicitud de firma de certificado (CSR) existente

9

¿Alguien puede decirme cómo agrego varios nombres alternativos de sujeto a una CSR existente?

No estoy hablando de generar una CSR con SAN o agregar SAN en el momento de la firma: sé cómo hacer ambas cosas.

Antecedentes: el problema que tenemos es que el chasis HP Blade le permite generar CSR, pero solo permiten una sola SAN. No podemos usar un CSR generado en otro lugar ya que no podríamos usar el certificado resultante ya que no hay forma (que pueda encontrar) de cargar la clave en el chasis del blade.

El proceso estándar de nuestra CA no permite agregar SAN. Están dispuestos a experimentar, sin embargo, estoy tratando de encontrar una solución a nuestro fin, ya que esto significa que no tendremos que confiar en que tengan un proceso no estándar para nosotros, en mi experiencia si necesitan usar un proceso no estándar la vida eventualmente se pondrá difícil. Por ejemplo, cuando un miembro del personal que conoce el proceso no estándar no está presente debido a una baja, etc.

El método actual es conectarse al administrador de bladechassis a través de la interfaz gráfica de usuario web y generar la CSR con un solo CN.

La interfaz gráfica de usuario web solo permite una única SAN en la CSR.

Luego lo firmamos con la siguiente estrofa en la configuración de openssl:

[ v3_ca ]
subjectAltName = "DNS:bladesystem8,DNS:bladesystem8.services.adelaide.edu.au,DNS:bladesystem8-backup,DNS:bladesystem8-backup.services.adelaide.edu.au"

El certificado resultante tiene las SAN adicionales.

Jason Tan
fuente
¿Cómo está generando los certificados en el chasis del blade actualmente? ¿Qué método está utilizando para conectar, etc., qué modelo de chasis blade?
Eli
El chasis es un c7000. Sí, actualmente estamos creando CSR en el chasis y agregando SAN en el momento de la firma, pero eso es para certificados autofirmados.
Jason Tan
¿Qué método está utilizando para conectarse actualmente y cuál es su proceso para generar certificados para él?
Eli
He editado la pregunta principal para incluir el método actual.
Jason Tan
1
¿Puede importar el certificado y la clave privada si lo genera en otra máquina y lo exporta?
Clint

Respuestas:

15

Si su chasis no admite agregar SAN, deberá quitar la llave del chasis y generar la CSR con openssl.

Asegúrese de que no req_extensions = v3_reqesté comentado en la [ req ]sección.

Agregue el subjectAltNamea la [ v3_req ]sección.

Generar una nueva CSR.

openssl req -new -key extracted_c7000.key -out your_new.csr

No puede editar una CSR existente.

Cakemox
fuente
Lo que dijo cakemox. Si pudieras editar un certificado (es decir, una CSR firmada) después de haber sido firmado, se anularía todo el propósito de las autoridades certificadoras.
MadHatter
No quiero editar la CSR después de que esté firmada; eso, como usted dice, derrotaría al puprose. Quiero editar el CSR después de que se genera, pero ANTES de que esté firmado. Definitivamente es posible editar partes de una CSR antes de firmar usando openssl.
Jason Tan
Si pudiera descargar la clave, lo haría. Lo siento, no mencioné eso en la pregunta original, pero no he podido encontrar la posibilidad de descargar la clave. Me encantaría pagarle la recompensa a alguien que pueda decirme cómo descargar la llave.
Jason Tan
FYI - Definitivamente es posible editar partes de una CSR antes de firmar usando openssl, en particular la opción "openssl req -subj". Sin embargo, hasta donde puedo decir, no agregará la extensión v3 SAN, solo le permitirá especificar una nueva línea de asunto que incluya CN adicionales.
Jason Tan
2
La CSR está firmada por la clave privada de la máquina, por lo que no puede editarla después de que se haya generado (o de lo contrario no se firmaría más). Sin embargo, es posible que la CA edite los campos puestos en el certificado público; esta es la única forma de cambiar el campo SAN (sobre el cual no tiene control si está enviando esto a una CA pública).
Chris S
0

Nota importante: todo esto es algo especulativo, por lo que si está profundamente inmerso en el código y no está de acuerdo con lo que digo, créelo. No soy un experto en CA, solo juego uno en la televisión. Eso dijo:

Como característica de las CSR, será difícil. El paso final para generar una CSR mediante programación es hacer hash de todo lo que ha creado y luego firmarlo con la clave privada. Entonces, si bien podría agregar esos atributos al texto de la CSR, la firma no coincidiría con el contenido, por lo que ninguna CA lo firmaría.

Sin embargo, en su caso, usted controla (o al menos está en contacto con) la CA. Esto te da dos opciones:

  1. Puede indicar a la CA que ignore alegremente la firma en la CSR y que emita un certificado de todos modos.
  2. Puede hacer que la CA emita un certificado diferente al solicitado (por ejemplo, agregando atributos).

De estos, el # 1 parece, con mucho, el más fácil. Tendrá que romper el sello de seguridad en OpenSSL para que lo haga, pero tiene algunas funciones que deberían facilitar un poco. Comenzaría con asn1parse, que le mostrará cómo separar la CSR.

BMDan
fuente
En futuras investigaciones, la opción n. ° 2 también es bastante simple y la realizan varias CA (por ejemplo, para agregar site.coma un www.site.comcertificado como SAN).
BMDan
0

Si bien la respuesta de cakemox es definitivamente la más fácil si de alguna manera puede obtener una copia de la clave privada, hay otra forma si no puede, básicamente, volviendo a firmar la CSR utilizando un certificado de "Agente de inscripción".

Esta publicación de blog de css-security.com tiene todos los detalles esenciales. Pero la descripción general de alto nivel del proceso se ve así:

  • Adquirir un certificado de agente de inscripción
  • Modificar una plantilla de certificado SSL para requerir un certificado EA para su emisión
  • Adquiera un CSR que necesite información SAN
  • Use el certificado EA para renunciar a la CSR mientras agrega la información SAN

Cuando lo intenté personalmente, estoy bastante seguro de que me salteé la parte sobre la modificación de la plantilla de certificado. Suponiendo que pueda generar un certificado de Agente de inscripción para usted, el proceso real se parece a esto.

Cree un san.inf con la información de la extensión SAN.

[Extensions]
2.5.29.17="{text}dns=mysan1.example&dns=mysan2.example"

Vuelva a firmar la solicitud.

certreq -policy -config "myca.example\CA" orig-request.csr san.inf corrected-request.csr

Enviar la solicitud corregida

certreq -submit -config "myca.example\CA" -attrib "CertificateTemplate:MyTemplate" corrected-request.csr

Y luego proceda normalmente con el proceso de emisión.

Ryan Bolger
fuente