Добавление дополнительных имен субъекта (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 не подпишет ее.
В вашем случае, однако, вы контролируете (или, по крайней мере, находитесь в контакте) ЦС. Это дает вам два варианта:
- Вы можете поручить ЦС беспечно игнорировать подпись на CSR и в любом случае выдать сертификат.
- CA может выдать сертификат, отличный от запрашиваемого (например, путем добавления атрибутов).
Из них № 1 кажется самым простым. Вам нужно будет сломать очевидную печать на OpenSSL, чтобы заставить это сделать это, но у него есть некоторые функции, которые должны сделать немного легче. Я бы начал с asn1parse, который покажет вам, как разбить CSR.