Пользовательский атрибут SAN с использованием +EDITF_ATTRIBUTESUBJECTALTNAME2 не работает.

Вопрос или проблема

У меня есть CSR, сгенерированный старым Dell RAC. Он не включает SAN, и я не могу извлечь закрытый ключ с карты. Поэтому я хочу добавить атрибуты SAN на моем сервере Windows 2019 CA, используя флаг +EDITF_ATTRIBUTESUBJECTALTNAME2 (я знаю о “опасностях” включения этого флага, но в данном случае это необходимо).

Шаги в статье Subject Alternative Name not added to certificate не работают для меня.

Возвращается ошибка Certificate not issued (Denied) Denied by Policy Module The parameter is incorrect. 0x80070057 (WIN32: 87 ERROR_INVALID_PARAMETER) независимо от того, использую ли я веб-регистрацию или certreq в командной строке.

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

Как мне заставить это работать?

Нужно ли редактировать шаблон веб-сервера, чтобы это заработало?

(PS: Unable to issue certificates after enabling SAN? говорит о получении ошибки периода действия. Я не получаю эту ошибку. Только ошибку The parameter is incorrect. 0x80070057).

Ответ или решение

Чтобы решить проблему с добавлением атрибута Subject Alternative Name (SAN) при помощи флага +EDITF_ATTRIBUTESUBJECTALTNAME2 в Windows 2019 CA сервере, сначала разберем теоретические аспекты, потом приведем пример, и наконец, объясним, как можно применить решение на практике.

Теория

SAN (Subject Alternative Name) — это расширение X.509, которое позволяет указывать альтернативные имена субъекта в сертификате. Оно часто используется для указания различных доменов, связанных с одним и тем же сертификатом. Windows Certificate Authority по умолчанию не позволяет добавлять SAN из-за возможных угроз безопасности, например, злоумышленник может использовать это для повышения полномочий.

Флаг +EDITF_ATTRIBUTESUBJECTALTNAME2 специально создан для случаев, когда возможно безопасное добавление SAN вручную. Однако его использование может привести к различным ошибкам, в том числе к ошибке параметров (0x80070057), если необходимая конфигурация не выполнена.

Пример

Разберем гипотетическую ситуацию: у вас имеется CSR (Certificate Signing Request) от старого Dell RAC, который не содержит SAN. При попытке выдать сертификат через Windows CA с флагом +EDITF_ATTRIBUTESUBJECTALTNAME2 вы сталкиваетесь с ошибкой "The parameter is incorrect. 0x80070057". Понимание всех шагов, инструкций и настроек поможет избежать такой ошибки.

Применение

На практике, чтобы добавить SAN в существующий CSR, будучи уверенным в безопасности этого процесса, следует учесть ряд шагов:

  1. Убедитесь в правильной настройке CA: Сначала убедитесь, что ваш CA настроен правильно для использования флага +EDITF_ATTRIBUTESUBJECTALTNAME2. Для этого проверьте все необходимые конфигурации в реестре:

    • Откройте реестр (наберите "regedit" в командной строке).
    • Перейдите в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<Your CA Name>.
    • Убедитесь, что флаг +EDITF_ATTRIBUTESUBJECTALTNAME2 добавлен в параметр EditFlags для профиля, который вы используете.
  2. Измените настройки шаблона: Возможно, потребуется модифицировать шаблон web-server, чтобы разрешить добавление SAN. Перейдите в свойства шаблона и настройте:

    • Разрешите пользовательским атрибутам добавляться в конце.
    • Убедитесь, что заявка допускает добавление атрибутов в поле Attributes в интерфейсе или скриптовых запросах.
  3. Создание и изменение запроса через Certreq.exe: Используйте командную строку для манипулирования с XML-файлом запроса, чтобы явно указать SAN. Ваш запрос возможен, но результаты могут зависеть от настроек привилегий пользователя и доменной политики.

    • Создайте файл запроса request.inf:

      [Version]
      Signature="$Windows NT$"
      
      [NewRequest]
      Subject = "CN=YourCommonName"
      ; Leave the key specification and length as per your requirement
      KeySpec = 1
      KeyLength = 2048
      Exportable = TRUE
      MachineKeySet = TRUE
      SMIME = FALSE
      PrivateKeyArchive = FALSE
      UserProtected = FALSE
      UseExistingKeySet = FALSE
      ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
      ProviderType = 12
      RequestType = PKCS10
      KeyUsage = 0xa0
      
      [Extensions]
      ; Add subject alternative names here, separated by commas
      2.5.29.17 = "{text}dns=yourdomain1.com&dns=yourdomain2.com"
    • Выполните запрос через certreq -submit request.inf.
  4. Мониторинг обращений и логов: Убедитесь, что все ошибки обрабатываются и статус ваших заявок можно отслеживать через интерфейс Monitoring или систему логирования Event Viewer. Это помогает выявить проблемы на раннем этапе.

Заключение

Несмотря на сложные процедуры, правильное понимание и применение этих шагов позволяет решать проблемы интеграции CSR с SAN без доступа к приватному ключу. Если проблема не решается через манипуляции с реестром и шаблонами, возможно, стоит пересмотреть более современные решения или альтернативные подходы, такие как использование другого генератора CSR.-SHA256 с поддержкой SAN уже по умолчанию. Однако, при грамотной структуре и понимании текущих ограничений, флаг +EDITF_ATTRIBUTESUBJECTALTNAME2 может успешно применяться для выполнения загаданной задачи.

Оцените материал
Добавить комментарий

Капча загружается...