
Quiero realizar una firma cruzada de una raíz ca de terceros ( third-party-ca
) con mi propia raíz ca ( r1
). (Fondo:restringir el uso)
Para hacer esto, uso
openssl x509-in third-party-ca.crt -CA /etc/pki/r1/ca.crt -CAkey /etc/pki/r1/private/ca.key -out third-party-ca-cross-signed.crt -set_serial 1000
Esto funciona, pero mantiene el Authority Key Identifier
de third-party-ca
, que debería cambiarse por el Subject Key Identifier
de r1
. (Para ver un ejemplo real, consulte letsencryptISRG X1 con firma cruzadaporDST raíz CA X3)
Puedo agregar otro Authority Key Identifier
creando un akiext
y usando -extfile akiext
. Sin embargo, esto da como resultado dos Authority Key Identifier
.
¿Cómo puedo reemplazar el existente Authority Key Identifier
?
Respuesta1
En openssl x509
la línea de comandos, no puede eliminar extensiones de forma selectiva; puedes usar -clrext
para soltartodoingrese las extensiones y configure en su -extfile
las extensiones preexistentes que desee (como mínimo BC y KU)máslos nuevos). Tenga en cuenta que los certificados públicos subordinados o cruzados de CA, como el que usted vincula, probablemente contengan AIA y/o CRLDP, así como AKI,todode los cuales sólo son correctos para el emisor/padre que está reemplazando y, por lo tanto, deben reemplazarse (o eliminarse).
Alternativamente, puedes escribir código; haciendo esto usando elAPIes sencillo. Pero eso probablemente pertenezca a SO otal vezsecurity.SX en lugar de aquí. (Y se espera que usted haga parte del trabajo).
En su ejemplo específico, ISRG Root X1 está disponible con firma cruzada de Identrust DST X3 ycomo raíz-- si comienzas desde el certificado raíz no tiene AKIoAIA/CRLDP que deben eliminarse.
Actualización: según lo revelado por unpregunta relacionada posteriorOpenSSL 3.0.0 no permite el caso de entrada no raíz; requiere que el certificado antiguo esté autofirmado (una raíz). Los comentarios en la fuente indican que esto siempre fue la intención, aunque antes no se había aplicado de manera efectiva.