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

9

Может кто-нибудь сказать мне, как я могу добавить несколько дополнительных имен субъекта в существующий 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.

Джейсон Тан
источник
Как вы генерируете сертификаты на шасси лезвия в настоящее время? Какой метод вы используете для подключения и т.д .. какая модель шасси блейд?
Эли
Шасси это с7000. Да, в настоящее время мы создаем CSR на шасси и добавляем SAN во время подписи, но это для самозаверяющих сертификатов.
Джейсон Тан
Какой метод вы используете для подключения к нему в настоящее время и каков ваш процесс создания сертификатов для него?
Эли
Я отредактировал основной вопрос, чтобы включить текущий метод.
Джейсон Тан
1
Можете ли вы импортировать Cert & Private Key, если создаете его на другом компьютере и экспортируете?
Клинт

Ответы:

15

Если ваше шасси не поддерживает добавление 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) после того, как он был подписан, это нанесло бы ущерб всей цели сертификационных органов.
MadHatter
Я не хочу редактировать CSR после его подписания - это, как вы говорите, победит куколку. Я хочу редактировать CSR после того, как он сгенерирован, но ДО того, как он будет подписан. Определенно возможно редактировать части CSR перед подписанием с использованием openssl.
Джейсон Тан
Если бы я мог скачать ключ, я бы. Извините, я не упомянул об этом в исходном вопросе, но я не смог найти, чтобы скачать ключ. Я был бы так же рад заплатить вознаграждение тому, кто скажет мне, как загрузить ключ.
Джейсон Тан
К вашему сведению - Определенно возможно редактировать части CSR перед подписанием с использованием openssl, в частности, опцию "openssl req -subj". Однако, насколько я могу сказать, добавить расширение SAN v3 нельзя, а просто указать новую тему, включая дополнительные CN.
Джейсон Тан
2
CSR подписан закрытым ключом машины, поэтому вы не можете редактировать его после того, как он был сгенерирован (иначе он больше не сможет быть подписан). Однако возможно, что ЦС редактирует поля, введенные в публичный сертификат; это единственный способ изменить поле SAN (которое вы не можете контролировать, если отправляете это в общедоступный центр сертификации).
Крис С
0

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

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

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

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

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

BMDan
источник
Что касается дальнейших исследований, вариант № 2 на самом деле также довольно прост и выполняется рядом CA (например, для добавления site.comв www.site.comсертификат как SAN).
BMDan
0

Хотя ответ 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

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

Райан Болджер
источник