Назад | Перейти на главную страницу

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

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

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

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

Стандартный процесс нашего CA не позволяет добавлять 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.

Если ваше шасси не поддерживает добавление сетей 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 с помощью сертификата «Агента регистрации».

это сообщение в блоге 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 - это хэширование всего, что вы создали, а затем его подпись с помощью закрытого ключа. Таким образом, хотя вы можете добавить эти атрибуты в текст CSR, подпись не будет совпадать с содержимым, поэтому никакой CA не будет ее подписывать.

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

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

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