¿Es posible firmar un certificado tal que el emisor sea diferente al certificado de la AC?

2

Digamos que tengo un certificado raíz autofirmado llamado root-ca.pem creado por openssl. Me permite firmar certificados. ¿Es posible firmar el certificado new.csr con root-ca.pem de manera tal que el emisor de new.csr firmado sea diferente del emisor que firmó root-ca.pem ?

    
pregunta 07.01.2014 - 17:15
fuente

2 respuestas

3

Sería posible hacer esto, pero la pregunta simple es: why?

Supongamos que al firmar el certificado TBS, cambie el nombre de usuario del emisor a otra cosa. Si el firmante especificado del certificado es diferente del firmante real , el proceso de validación de la ruta del certificado fallará.

Consulte RFC 5280 Section 6 para ver el algoritmo de validación de la ruta del certificado. Una de las comprobaciones clave es que el sujeto del certificado x es el emisor del certificado x + 1, que en su pregunta no es el caso. Por lo tanto, el certificado producido siempre fallará en la validación del certificado.

En todas las situaciones comerciales, no podrá hacer esto, porque la parte del certificado del emisor no está incluida en la solicitud de certificado ( consulte el formato PKCS # 10 y lo establece la CA justo antes de la firma real del certificado.

Pero si estaba haciendo la programación real de la firma del certificado (utilizando, por ejemplo, las API de bouncycastle en Java o C #), podría cambiar el nombre del emisor. Sin embargo, al hacerlo, su certificado no superará la validación de todos los sistemas que no sea un sistema de validación personalizado que tendría que construir usted mismo.

    
respondido por el NRCocker 08.01.2014 - 05:28
fuente
1

No, pero teniendo en cuenta que incluso los certificados comerciales pueden tener una firma cruzada, podría ser importante prestar mucha atención a los detalles.

Por ejemplo, podría terminar en una situación en la que su certificado $ A $ pueda verificarse mediante un certificado autofirmado $ B $ o un certificado de CA intermedio $ C $ emitido por una raíz $ D $. Aún así, en tales situaciones, las siguientes ecualizaciones deberían ser verdaderas:

  • $ A.issuer = B.subject = C.subject $
  • $ B.subject = B.issuer $
  • $ B.PublicKey = C.PublicKey $
  • $ Verify_ {B.PublicKey} (A) = Verify_ {C.PublicKey} (A) = OK $

Tenga en cuenta que la primera y la segunda igualdad implican que $ A.issuer = B.issuer $ como usted lo pide. Sin embargo, desde $ C.subject \ ne C.issuer $, tendrá $ A.issuer \ ne C.issuer $, aunque se puede usar $ C $ para verificar $ A $.

    
respondido por el Henrick Hellström 08.01.2014 - 10:55
fuente

Lea otras preguntas en las etiquetas