добавить или создать поле «Альтернативное имя субъекта» в самозаверяющий сертификат с помощью makecert

Как я могу создать сертификат, используя makecert с полем «Альтернативное имя субъекта»?

введите здесь описание изображения

Вы можете добавить некоторые поля, например, «Расширенное использование ключа» с опцией -eku, и я пробовал опцию -san, но makecert не нравится.

Это самозаверяющий сертификат, поэтому любой метод, использующий IIS для создания чего-либо для отправки в ЦС, не подходит.


person wal    schedule 17.06.2011    source источник


Ответы (3)


Makecert не поддерживает SAN, поэтому я создал сертификат с SAN для использования с IIS с использованием OpenSSL. Посмотрите мой пост об этом в блоге:

IIS 7 предоставляет несколько простых в использовании мастеров для создания SSL-сертификатов, однако они не очень мощные. Что мне нужно было сделать, так это создать SSL-сертификаты, которые включали расширение x.509 V3, а именно альтернативные имена субъектов, также известные как SAN. Что делают SAN, так это позволяют сертификату веб-сайта проверять входящие запросы по более чем одному доменному имени URL. Это действительно важно, когда веб-сервер запускает веб-службы, такие как службы WCF, и когда другие веб-службы подключаются к ним через SSL-соединения, как в сервисно-ориентированных архитектурах. Если к веб-службам не добавлен специальный код для переопределения процедур обработчика проверки SSL по умолчанию, общее имя (CN) сертификата ДОЛЖНО соответствовать домену URL-адреса входящего запроса. Поэтому, если запрос был сделан с использованием полного доменного имени, сертификат должен иметь полное доменное имя как CN или SAN, IP-адрес или просто имя хоста вызовет ошибку проверки SSL, и соединение не будет установлено.

Сети SAN спешат на помощь… Сети SAN поддерживают, среди прочего, DNS-имена и IP-адреса. Таким образом, создание сертификата с SAN полного доменного имени и IP-адреса сервера расширяет возможности подключения других веб-служб.

Существует ряд инструментов, которые могут генерировать сертификаты: makecert.exe, keytool.exe (java), selfssl.exe и openssl.exe. Кроме того, начиная с Windows Vista и Server 2008, Microsoft добавила CertEnroll API, который также может создавать сертификаты программно либо через COM-интерфейсы.

В итоге OpenSSL сделал именно то, что мне было нужно. Процесс был довольно прямолинейным.

  1. Создайте файл конфигурации OpenSSL.

[req] disabled_name = req_distinguished_name x509_extensions = v3_req prompt = no [req_distinguished_name] C = US ST = VA L = Somewhere O = MyOrg OU = MyOU CN = MyServerName [v3_req] keyUsage = keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names ] DNS.1 = MyServerName DNS.2 = 10.0.1.34 IP.1 = 10.0.1.34 IP.2 = 192.167.20.1

  1. Создайте запрос x509 с OpenSSL

openssl.exe req -x509 -nodes -days 730 -newkey rsa:2048 -keyout C:\cert.pem -out C:\cert.pem -config C:\PathToConfigFileAbove.txt

  1. Создайте PFX, содержащий пару ключей

openssl.exe pkcs12 -export -out C:\cert.pfx -in C:\cert.pem -name My Cert -passout pass:mypassword

  1. Импортируйте PFX в IIS, используя ссылку импорта в области сертификатов сервера.

  2. Привяжите сертификат к веб-сайтам IIS.

И виола, мы знаем, что у нас есть SSL-сертификат для IIS с SAN, поэтому мы можем подключаться, используя несколько доменных имен, без ошибок проверки сертификата.

Источник: Создание сертификатов с SAN с использованием OpenSSL< /em> Энди Аримети, четверг, 1 сентября 2011 г.

person Andy Arismendi    schedule 15.10.2011

Еще более простой способ — использовать командлет New-SelfSignedCertificate PowerShell, который по умолчанию включает SAN. С помощью одной команды вы можете создать сертификат и добавить его в хранилище.

New-SelfSignedCertificate -DnsName localhost -CertStoreLocation cert:\LocalMachine\My

Обратите внимание, что вам нужно запустить PowerShell от имени администратора.

person DanO    schedule 28.04.2017
comment
как вы передаете альтернативные имена субъекта в этот командлет? - person wal; 28.04.2017
comment
Он создает его для вас на основе предоставленного DnsName. Вы также можете передать список, разделенный запятыми, если вам нужно поддерживать несколько URL-адресов. Например. New-SelfSignedCertificate -DnsName localhost, mysite.com, test.com -CertStoreLocation cert:\LocalMachine\My - person DanO; 28.04.2017
comment
Даже если вы установите Powershell v4, эта команда доступна ТОЛЬКО на Windows Server 2012+ и Windows 8+ (или, может быть, 8.1+ ??). Нет Win 7 и нет Server 2008 :( - person Jester; 28.04.2017
comment
@Jester Учитывая, что это самозаверяющий сертификат, я думаю, что необходимость его установки на сервер как бы говорит вам о том, что вам следует рассмотреть возможность получения сертификата, скажем, Let’s Encrypt. - person Dan Atkinson; 23.05.2017
comment
Как выдать сертификат с помощью собственного TestCA через New-SelfSignedCertificate? - person Will Huang; 12.04.2018
comment
Недавно я пытался сделать это снова для Win7: просто используйте машину с Win 2012, создайте сертификат, затем экспортируйте и импортируйте в поле Win7, и он отлично работает. - person Jester; 13.09.2018
comment

Обновить

Сертификат, сгенерированный с помощью описанного ниже метода makecert, не работает надежно во всех браузерах, поскольку он фактически не создает «Альтернативное имя субъекта».

Если вы изучите сертификат, вы увидите, что на самом деле он не имеет поля Subject Alternative Name, а вместо этого указывает несколько CN в поле Subject.

E.g.

Subject:
CN = blah.foo.corp
CN = blah

В то время как настоящий сертификат «SAN» будет иметь что-то вроде:

Subject Alternative Name:
DNS Name=blah.foo.corp
DNS Name=blah

Чтобы понять различия и историю между полем «Тема» с «Общим именем» и полем «Альтернативное имя субъекта», я рекомендую прочитать Не очень распространенное имя (скоро будет).

Таким образом, оказывается, что makecert нельзя использовать для создания подлинного сертификата "SAN", и вам нужно будет использовать другие инструменты, такие как openssl.


Исходный ответ:

По крайней мере, в версии makecert, поставляемой с Visual Studio 2012, вы можете указать несколько тем, просто указав список, разделенный запятыми -n "CN=domain1, CN=domain2"

Например. (из блога технет Makecert.exe SAN и групповой сертификат)

makecert -r -pe -n "CN=*.fabrikam.com, CN=*.contoso.com" -b 01/01/2010 -e 01/01/2100 -eku 1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.3,1.3.6.1.5.5.7.3.4 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -len 2048
person Nathan    schedule 20.06.2013
comment
Чтобы было ясно, вы не хотите использовать несколько SubjectCN, так как Firefox учитывает только последний, а Chrome — только первый. - person EricLaw; 05.10.2015