Добавление дополнительных имен субъекта (SAN) в существующий запрос сертификата подписи (CSR)

Может кто-нибудь сказать мне, как я могу добавить несколько дополнительных имен субъекта в существующий CSR?

Я не говорю о создании CSR с SAN или о добавлении SAN во время подписания - я знаю, как сделать обе эти вещи.

Справочная информация. Проблема, с которой мы столкнулись, заключается в том, что блейд-шасси HP позволяют генерировать CSR, но позволяют использовать только одну сеть SAN. Мы не можем использовать CSR, сгенерированный в другом месте, так как мы не можем использовать полученный сертификат, поскольку нет способа (который я могу найти) загрузить ключ в шасси блейда.

Стандартный процесс нашего ЦС не позволяет добавлять SAN во время подписания. Они готовы экспериментировать, однако я пытаюсь найти решение с нашей стороны, так как это будет означать, что нам не придется полагаться на то, что у них есть нестандартный процесс для нас - по моему опыту, если им нужно использовать нестандартный процесс жизнь в конце концов станет трудной. Например, когда сотрудник, который знает нестандартный процесс, не присутствует в связи с уходом и т. Д.

Текущий метод заключается в подключении к встроенному администратору blade-шасси через веб-интерфейс и генерации CSR с одним CN.

Веб-интерфейс позволяет использовать только одно SAN в CSR.

Затем мы самостоятельно подписываем его с помощью следующего раздела в конфигурации openssl:

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

Полученный сертификат имеет дополнительные SAN.

3 ответа

Если ваше шасси не поддерживает добавление SAN, вам нужно получить ключ от шасси и сгенерировать CSR с помощью openssl.

Удостовериться req_extensions = v3_req не комментируется в [ req ] раздел.

Добавить subjectAltName к [ v3_req ] раздел.

Создайте новый CSR.

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

Вы не можете редактировать существующий CSR.

Хотя ответ cakemox, безусловно, самый простой, если вы можете каким-то образом получить копию закрытого ключа, есть другой способ, если вы не можете просто переподписать CSR, используя сертификат "Enrollment Agent".

Это сообщение в блоге css-security.com содержит все мельчайшие детали. Но общий обзор процесса выглядит так:

  • Получить сертификат агента регистрации
  • Измените шаблон сертификата SSL, чтобы требовать сертификат EA для выдачи
  • Получите CSR, который нуждается в информации SAN
  • Используйте сертификат EA для отставки CSR при добавлении информации SAN

Когда я попробовал это лично, я почти уверен, что пропустил часть об изменении шаблона сертификата. Предполагая, что вы можете сгенерировать сертификат Агента регистрации для себя, сам процесс выглядит примерно так.

Создайте файл san.inf с информацией о расширении SAN.

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

Повторно подпишите запрос

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

Отправить исправленный запрос

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

А затем продолжить как обычно процесс выдачи.

Важное примечание: все это несколько умозрительно, поэтому, если вы глубоко в коде и не согласны с тем, что я говорю, поверьте коду. Я не эксперт по CA, я просто играю по телевизору. Это говорит:

Как особенность КСО, это будет сложно. Последний шаг в программной генерации CSR - это хэшировать все, что вы создали, а затем подписать его закрытым ключом. Таким образом, хотя вы можете добавить эти атрибуты в текст CSR, подпись не будет совпадать с содержимым, поэтому ни один CA не подпишет ее.

В вашем случае, однако, вы контролируете (или, по крайней мере, находитесь в контакте) ЦС. Это дает вам два варианта:

  1. Вы можете поручить ЦС беспечно игнорировать подпись на CSR и в любом случае выдать сертификат.
  2. CA может выдать сертификат, отличный от запрашиваемого (например, путем добавления атрибутов).

Из них № 1 кажется самым простым. Вам нужно будет сломать очевидную печать на OpenSSL, чтобы заставить это сделать это, но у него есть некоторые функции, которые должны сделать немного легче. Я бы начал с asn1parse, который покажет вам, как разбить CSR.

Другие вопросы по тегам