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 сделал именно то, что мне было нужно. Процесс был довольно прямолинейным.
- Создайте файл конфигурации 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
- Создайте запрос x509 с OpenSSL
openssl.exe req -x509 -nodes -days 730 -newkey rsa:2048 -keyout C:\cert.pem -out C:\cert.pem -config C:\PathToConfigFileAbove.txt
- Создайте PFX, содержащий пару ключей
openssl.exe pkcs12 -export -out C:\cert.pfx -in C:\cert.pem -name My Cert -passout pass:mypassword
Импортируйте PFX в IIS, используя ссылку импорта в области сертификатов сервера.
Привяжите сертификат к веб-сайтам IIS.
И виола, мы знаем, что у нас есть SSL-сертификат для IIS с SAN, поэтому мы можем подключаться, используя несколько доменных имен, без ошибок проверки сертификата.