Вопрос или проблема
У меня есть 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, будучи уверенным в безопасности этого процесса, следует учесть ряд шагов:
-
Убедитесь в правильной настройке CA: Сначала убедитесь, что ваш CA настроен правильно для использования флага +EDITF_ATTRIBUTESUBJECTALTNAME2. Для этого проверьте все необходимые конфигурации в реестре:
- Откройте реестр (наберите "regedit" в командной строке).
- Перейдите в ветку
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<Your CA Name>
. - Убедитесь, что флаг +EDITF_ATTRIBUTESUBJECTALTNAME2 добавлен в параметр
EditFlags
для профиля, который вы используете.
-
Измените настройки шаблона: Возможно, потребуется модифицировать шаблон web-server, чтобы разрешить добавление SAN. Перейдите в свойства шаблона и настройте:
- Разрешите пользовательским атрибутам добавляться в конце.
- Убедитесь, что заявка допускает добавление атрибутов в поле Attributes в интерфейсе или скриптовых запросах.
-
Создание и изменение запроса через
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
.
-
-
Мониторинг обращений и логов: Убедитесь, что все ошибки обрабатываются и статус ваших заявок можно отслеживать через интерфейс Monitoring или систему логирования Event Viewer. Это помогает выявить проблемы на раннем этапе.
Заключение
Несмотря на сложные процедуры, правильное понимание и применение этих шагов позволяет решать проблемы интеграции CSR с SAN без доступа к приватному ключу. Если проблема не решается через манипуляции с реестром и шаблонами, возможно, стоит пересмотреть более современные решения или альтернативные подходы, такие как использование другого генератора CSR.-SHA256 с поддержкой SAN уже по умолчанию. Однако, при грамотной структуре и понимании текущих ограничений, флаг +EDITF_ATTRIBUTESUBJECTALTNAME2 может успешно применяться для выполнения загаданной задачи.