bg-tutorials

Как сгенерировать CSR в Windows

В этом руководстве показано, как сгенерировать CSR (Certificate Signing Request) в Windows с помощью инструментов, встроенных в операционную систему.

CSR — это текстовый блок формата PKCS #10, который содержит ваш открытый ключ и данные субъекта для передачи в удостоверяющий центр (CA), который подписывает его и возвращает вам SSL/TLS сертификат. Соответствующий закрытый ключ остаётся на машине, на которой был сгенерирован запрос.

В Windows есть три встроенных способа создать CSR, и каждый из них рассмотрен ниже. Выберите тот, который подходит вашему рабочему процессу:

  • Оснастка Certificates MMC (графическая), которая проведёт вас через мастер и позволит добавить Subject Alternative Name. Это способ, описанный в оригинальном руководстве, и его выбирает большинство пользователей.
  • Утилита командной строки certreq.exe с INF-файлом, которая поддерживает скриптинг, поддерживает SAN и является стандартным методом на Windows Server.
  • Исполняемый файл OpenSSL для Windows (отдельная загрузка), который создаёт CSR точно так же, как это делают администраторы Linux.

Если вы используете веб-сервер с собственным процессом создания CSR, используйте его вместо общих шагов для Windows: см. отдельные руководства для IIS и Microsoft Exchange. Приведённые ниже шаги охватывают Windows 10, Windows 11 и Windows Server с версии 2016 по 2025; перед началом работы войдите в систему под учётной записью с правами локального администратора.

Создание CSR с помощью оснастки Certificates MMC

Консоль управления Microsoft (MMC) поставляется с каждой поддерживаемой версией Windows и предоставляет мастер Create Custom Request, который может создать CSR с записью SAN. Мастер сохраняет новый закрытый ключ в хранилище сертификатов локального компьютера, поэтому любая служба Windows на этой машине (IIS, ADFS, RD Gateway, RDP) сможет использовать выданный сертификат после его установки.

Шаг 1: Откройте оснастку MMC Certificates для локального компьютера

Нажмите Win + R, введите приведённую ниже команду и нажмите Enter:

mmc

В пустой консоли MMC откройте File > Add/Remove Snap-in. Выберите Certificates в списке слева, нажмите Add, выберите Computer account, нажмите Next, оставьте выбранным Local computer и нажмите Finish, затем OK. Оснастка Certificates теперь привязана к хранилищу локального компьютера, из которого считывают данные службы Windows.

Шаг 2: Запустите пользовательский запрос на сертификат

В левой панели разверните Certificates (Local Computer) и щёлкните правой кнопкой мыши по Personal. Выберите All Tasks > Advanced Operations > Create Custom Request. Откроется мастер Certificate Enrollment. Нажмите Next.

На экране Select Certificate Enrollment Policy выберите Proceed without enrollment policy в разделе Custom Request и нажмите Next. Это указывает Windows создать автономный CSR для внешнего CA, а не регистрировать сертификат по внутреннему шаблону Active Directory Certificate Services.

Шаг 3: Выберите шаблон и формат запроса

На экране Custom request установите для параметра Template значение (No template) CNG key, оставьте Request format на PKCS #10 и нажмите Next. CNG (Cryptography Next Generation) — это современный поставщик ключей Windows, и это правильный выбор для новых запросов; устаревший вариант CSP нужен только для совместимости со старыми приложениями.

На экране Certificate Information разверните стрелку Details рядом с записью запроса и нажмите Properties. Диалоговое окно Certificate Properties — это место, где настраивается остальная часть CSR.

Шаг 4: Заполните данные субъекта и Subject Alternative Names

На вкладке General введите понятное имя и, при желании, описание, чтобы позже вы могли идентифицировать ожидающий запрос в хранилище сертификатов.

Перейдите на вкладку Subject. В разделе Subject name оставляйте Type на Full DN только если вы точно знаете, что делаете; в большинстве случаев добавляйте каждый компонент по очереди с помощью выпадающего списка Type. Для каждого из следующих атрибутов выберите тип, введите значение и нажмите Add:

  • Common Name: полное доменное имя, которое вы хотите защитить, например, www.yourdomain.com. Для wildcard-сертификата поставьте звёздочку перед корневым доменом, например, *.yourdomain.com.
  • Country: двухбуквенный код страны по ISO, например, US, GB или DE.
  • State: полное название штата или региона (например, California, а не CA).
  • Locality: полное название города, в котором зарегистрирована ваша организация (например, San Jose, а не SJ).
  • Organization: юридическое название вашей компании, точно как в регистрационных документах. Обязательно для сертификатов OV и EV. Для сертификатов Domain Validation (DV) это поле игнорируется, поэтому подойдёт любое условное значение.

Пропустите атрибут Email. Согласно RFC 5280, в новых сертификатах адрес электронной почты должен указываться в расширении Subject Alternative Name (как rfc822Name), а не в Distinguished Name субъекта, и публичные CA могут удалить значение email из субъекта TLS-сертификата. Если не указывать его, CSR остаётся чистым.

В разделе Alternative name той же вкладки установите Type на DNS и добавьте каждое имя хоста, которое должен покрывать сертификат, нажимая Add для каждой записи. Обязательно укажите здесь и Common Name: браузеры, .NET, Java, Go и другие современные TLS-клиенты строго проверяют имя хоста по списку SAN и игнорируют Common Name. Типичный веб-сертификат использует две DNS-записи:

  • yourdomain.com
  • www.yourdomain.com

Для wildcard-заказа добавьте и wildcard-запись, и корневой домен: *.yourdomain.com и yourdomain.com.

Шаг 5: Настройте ключ и подпись

Перейдите на вкладку Private Key и по очереди разверните каждый раздел.

  • Cryptographic Service Provider: оставьте выбранным значение по умолчанию — RSA, Microsoft Software Key Storage Provider. Это современный CNG-провайдер для RSA-ключей.
  • Key options: установите Key size на 2048 (текущий минимум для публичных CA). Выбирайте 3072 или 4096 только если ваша политика требует более крупного ключа; компромисс — немного более медленное установление TLS-соединения. Отметьте Make private key exportable, если хотите иметь возможность сделать резервную копию ключа или перенести выданный сертификат на другой сервер.
  • Select Hash Algorithm: в разделе Select hash algorithm выберите sha256. SHA-1 больше не принимается публичными CA, а SHA-256 является современным значением по умолчанию. Оставьте флажок Use alternate signature format снятым.

Нажмите OK, чтобы закрыть диалоговое окно свойств, затем нажмите Next в мастере.

Шаг 6: Сохраните файл CSR

На экране Where do you want to save the offline request? установите File format на Base 64 (CA ожидают PEM в кодировке base64, а не бинарный формат). Нажмите Browse, выберите папку, которую вы легко найдёте позже (отдельная папка C:certs или рабочий стол удобнее, чем путь по умолчанию в Windows), присвойте файлу имя с расширением .req или .txt и нажмите Save. Нажмите Finish, чтобы записать CSR.

Мастер записывает CSR в файл и сохраняет соответствующий закрытый ключ в разделе Certificates (Local Computer) > Certificate Enrollment Requests. Не удаляйте этот ожидающий запрос: когда CA вернёт выданный сертификат, Windows автоматически свяжет его с ожидающим ключом.

Шаг 7: Скопируйте CSR и отправьте его в CA

Откройте сохранённый файл в Блокноте. Вы должны увидеть блок, похожий на этот:

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDXjCCAkYCAQAwgZQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
... (many lines of base64) ...
-----END NEW CERTIFICATE REQUEST-----

Выделите весь блок, включая строки с пятью дефисами BEGIN NEW CERTIFICATE REQUEST и END NEW CERTIFICATE REQUEST, скопируйте его и вставьте в поле CSR формы заказа SSL.

Создание CSR с помощью certreq.exe и INF-файла

Утилита командной строки certreq.exe поставляется с каждой версией Windows Server, а также присутствует в клиентских Windows 10 и 11. Это правильный метод, если вы хотите автоматизировать создание CSR с помощью скрипта, задать нестандартные параметры ключа или сформировать запрос удалённо в сеансе, где невозможно запустить MMC. Процесс состоит из трёх частей: создать INF-файл запроса, выполнить certreq -new для генерации CSR, а затем отправить CSR в ваш CA.

Шаг 1: Создайте INF-файл запроса

Откройте Блокнот от имени администратора и сохраните приведённый ниже файл как request.inf. Отредактируйте строку Subject и записи DNS в разделе [Extensions] в соответствии с вашим доменом:

[Version]
Signature="$Windows NT$"

[NewRequest]
Subject = "CN=www.yourdomain.com, O=Your Company, L=San Jose, S=California, C=US"
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
HashAlgorithm = SHA256

[EnhancedKeyUsageExtension]
OID = 1.3.6.1.5.5.7.3.1

[Extensions]
2.5.29.17 = "{text}"
_continue_ = "dns=www.yourdomain.com&"
_continue_ = "dns=yourdomain.com"

Примечания к значениям:

  • Subject: одна строка с компонентами, разделёнными запятыми. Используйте двухбуквенный код страны по ISO в C= и пишите названия штата и города полностью.
  • KeyLength: минимум 2048. Установите 3072 или 4096, если ваша политика требует более крупного ключа.
  • Exportable = TRUE: позволяет экспортировать закрытый ключ вместе с выданным сертификатом (для резервного копирования или установки на второй сервер). Установите значение FALSE, если хотите привязать ключ к этой машине.
  • MachineKeySet = TRUE: сохраняет ключ в хранилище локального компьютера, из которого считывают данные такие службы, как IIS. Оставляйте этот параметр включённым для серверных нагрузок.
  • HashAlgorithm = SHA256: подписывает запрос с помощью SHA-256, современного значения по умолчанию. В более старых примерах иногда по умолчанию используется SHA-1, который публичные CA больше не принимают.
  • 2.5.29.17: OID для Subject Alternative Name. Добавьте одну строку _continue_ на каждое имя хоста; все строки, кроме последней, должны заканчиваться разделителем &. Укажите здесь и Common Name, потому что TLS-клиенты проверяют его по списку SAN.

Шаг 2: Сгенерируйте CSR

Откройте Командную строку или PowerShell с повышенными правами, перейдите в папку с файлом request.inf и выполните:

certreq -new request.inf request.csr

Утилита создаёт закрытый ключ в хранилище локального компьютера и записывает запрос PKCS #10 в файл request.csr. Откройте файл, скопируйте весь блок от BEGIN NEW CERTIFICATE REQUEST до END NEW CERTIFICATE REQUEST и вставьте его в форму заказа.

Когда CA вернёт выданный сертификат, завершите привязку с помощью команды:

certreq -accept certnew.cer

Это связывает выданный сертификат с закрытым ключом, который ожидал в хранилище, после чего сертификат становится доступным для любой службы Windows, которой он нужен.

Создание CSR в Windows с помощью OpenSSL

Windows не поставляется с OpenSSL, но поддерживаемая сборка для Windows доступна на сайте Shining Light Productions. Процесс работы с OpenSSL идентичен процессу в Linux и создаёт ключ и CSR в виде двух отдельных файлов, что полезно, если вы планируете развернуть сертификат на платформе, не использующей хранилище сертификатов Windows (например, стороннем обратном прокси-сервере, Tomcat или собственном приложении).

Установите пакет Win64 OpenSSL Light (обычного установщика достаточно для работы с CSR), и когда программа установки спросит, скопируйте DLL-файлы OpenSSL в каталог bin OpenSSL, а не в системную папку Windows. Откройте Командную строку или PowerShell и убедитесь, что OpenSSL доступен через PATH:

openssl version

Если команда не найдена, либо добавьте папку установки (обычно C:Program FilesOpenSSL-Win64bin) в переменную PATH, либо вызывайте openssl, указывая полный путь. Затем сгенерируйте CSR и ключ одной командой:

openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr -subj "/C=US/ST=California/L=San Jose/O=Your Company/CN=www.yourdomain.com" -addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

Что делает каждый флаг:

  • -newkey rsa:2048 создаёт новый 2048-битный RSA-ключ. Используйте rsa:4096 для более крупного ключа, если этого требует ваша политика.
  • -nodes записывает закрытый ключ без пароля, чтобы использующая его служба могла считать его при запуске без запроса пароля. В OpenSSL 3.x этот флаг переименован в -noenc; -nodes по-прежнему работает, но считается устаревшим.
  • -keyout и -out задают имена файла ключа и файла CSR.
  • -subj передаёт данные субъекта прямо в команде, чтобы OpenSSL не останавливался с интерактивными вопросами.
  • -addext «subjectAltName=…» добавляет список SAN. Укажите здесь и Common Name.

OpenSSL 3.x по умолчанию подписывает CSR с помощью SHA-256, поэтому дополнительный флаг для алгоритма хеширования не нужен. Обратите внимание на разный заголовок: OpenSSL записывает -----BEGIN CERTIFICATE REQUEST-----, тогда как мастер MMC и certreq записывают -----BEGIN NEW CERTIFICATE REQUEST-----. Оба варианта являются обычными запросами PKCS #10, и каждый CA принимает любую из этих форм. Относитесь к получившемуся файлу yourdomain.key как к секретной информации: тот, у кого он есть, может выдать себя за владельца сертификата.

Проверьте CSR перед отправкой

Перед отправкой запроса в ваш CA убедитесь в правильности Common Name, записей SAN, размера ключа и алгоритма подписи. В командной строке Windows утилита certutil может прочитать любой файл CSR:

certutil -dump request.csr

Если у вас установлен OpenSSL, аналогичная команда выводит те же данные:

openssl req -noout -text -in request.csr

Предпочитаете работать через браузер? Вставьте содержимое запроса в декодер CSR от SSL Dragon, чтобы прочитать субъект, список SAN, размер ключа и алгоритм подписи. Убедитесь, что Common Name соответствует имени хоста, которое будут использовать клиенты, что каждое необходимое имя присутствует в списке SAN и что алгоритм подписи — sha256WithRSAEncryption (или сильнее).

Если вы предпочитаете сгенерировать CSR не на сервере, наш генератор CSR создаёт запрос (с SAN) на основе одной формы. Компромисс заключается в том, что закрытый ключ создаётся в вашем браузере, а не в хранилище Windows, поэтому, когда CA выдаст сертификат, вам нужно будет объединить сертификат и ключ в файл .pfx и импортировать его через консоль управления сертификатами вашего приложения.

Часто задаваемые вопросы

Какой способ создания CSR в Windows мне выбрать?

Если вы защищаете службу Windows, которая считывает данные из хранилища сертификатов локального компьютера (IIS, ADFS, RDP, RD Gateway, WinRM), используйте оснастку MMC или certreq.exe: оба способа создают ключ в нужном месте, чтобы выданный сертификат был готов к привязке. Если вы готовите CSR для платформы, отличной от Windows, или хотите получить отдельный файл ключа, который можно скопировать на сервер Linux или стороннее устройство, используйте OpenSSL в Windows. Все три метода дают на выходе один и тот же PKCS #10 CSR, который принимает любой публичный CA.

Нужно ли указывать адрес электронной почты в субъекте CSR?

Нет. RFC 5280 предписывает указывать адрес электронной почты в новых сертификатах в расширении Subject Alternative Name как rfc822Name, а не в Distinguished Name субъекта. Публичные CA могут удалить значение email из субъекта TLS-сертификата при выдаче, поэтому добавлять его для HTTPS не имеет смысла. Не заполняйте поле Email ни в мастере, ни в INF-файле.

Где находится закрытый ключ после создания CSR в Windows?

При использовании оснастки MMC или certreq.exe ключ находится в разделе Certificates (Local Computer) > Certificate Enrollment Requests в виде ожидающего запроса и автоматически связывается с выданным сертификатом при завершении регистрации. При использовании OpenSSL ключ — это файл .key, записанный рядом с CSR; защищайте его как любую другую секретную информацию и создайте резервную копию перед развёртыванием сертификата.

Можно ли сгенерировать CSR напрямую в PowerShell, без INF-файла?

В PowerShell нет собственного командлета для CSR. New-SelfSignedCertificate создаёт пару ключей, но в результате получается готовый самоподписанный сертификат, а не CSR, который может подписать публичный CA. Поддерживаемый способ создания запроса из PowerShell — записать показанный выше INF-файл и вызвать для него certreq.exe (certreq -new request.inf request.csr). Сторонние модули, такие как PSPKI, оборачивают certreq в более удобный интерфейс, но в основе по-прежнему лежит certreq.

Что произойдёт, если я отменю работу мастера или так и не отправлю запрос?

Ожидающий запрос и его закрытый ключ остаются в разделе Certificates (Local Computer) > Certificate Enrollment Requests. Сами по себе они ничего не делают и ничего не нарушают, но со временем накапливаются. Откройте оснастку MMC Certificates, просмотрите ожидающие запросы и удалите те, которые вам больше не нужны; это также удалит соответствующий ключ.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете
Написано

Опытный автор контента, специализирующийся на SSL-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.