
Я хочу перекрестно подписать сторонний корневой центр сертификации ( third-party-ca
) с помощью моего собственного корневого центра сертификации ( r1
). (Предыстория:ограничение использования)
Для этого я использую
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
Это работает, но сохраняет Authority Key Identifier
из third-party-ca
, который необходимо изменить на Subject Key Identifier
из r1
. (Для реального примера см. letsencryptISRG X1 с перекрестной подписьюкDST Корневой CA X3)
Я могу добавить еще один, Authority Key Identifier
создав akiext
и используя -extfile akiext
. Однако это приводит к двум Authority Key Identifier
.
Как я могу заменить существующий Authority Key Identifier
?
решение1
В openssl x509
командной строке нельзя выборочно удалять расширения; можно использовать -clrext
для удалениявсевведите расширения и настройте в них -extfile
нужные вам уже существующие расширения (как минимум BC и KU)плюсновый(е). Обратите внимание, что публичные подчиненные или перекрестные сертификаты CA — такие как тот, на который вы ссылаетесь — скорее всего, содержат AIA и/или CRLDP, а также AKI,всеиз которых верны только для эмитента/материнской организации, которую вы заменяете, и поэтому должны быть заменены (или удалены).
В качестве альтернативы вы можете написать код, используяAPIпросто. Но это, вероятно, относится к SO илиможет бытьsecurity.SX вместо here. (И от вас ожидается выполнение части работы.)
В вашем конкретном примере ISRG Root X1 доступен как с перекрестной подписью Identrust DST X3, так икак корень-- если вы начинаете с корневого сертификата, у него нет AKIилиAIA/CRLDP, которые необходимо удалить.
Обновление: как показалопоследующий связанный вопросOpenSSL 3.0.0 и выше не допускает случай ввода без прав root; требуется, чтобы старый сертификат был самоподписанным (корневым). Комментарии в источнике указывают, что это всегда подразумевалось, хотя и не применялось эффективно ранее.