Как создать самозаверяющий сертификат для доменного имени для разработки?

У меня есть subdomain.example.com, который я использую для целей разработки. Мое решение для веб-приложений содержит веб-API и т.д., Которые мне нужно вызывать из внешних систем, поэтому я не использую localhost.

Теперь мне нужно проверить SSL и вам нужен сертификат для моего доменного имени subdomain.example.com.

Я попытался создать самозаверяющий сертификат, как описано в http://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx, но этот сертификат работает только для localhost. Может ли этот сертификат использоваться для моей цели или мне нужно создать самоподписанный для моего субдомена разработки? Если мне нужно создать самоподписанную сертификацию для моего поддомена разработки, какую утилиту или онлайн-сервис (бесплатно) я могу использовать для этого?

Ответ 1

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

С помощью функции самозаверяющего сертификата IIS вы не можете установить общее имя (CN) для сертификата и, следовательно, не можете создать сертификат, привязанный к вашему выбору субдомена.

Один из способов решения проблемы - использовать makecert.exe, который поставляется вместе с SDK.Net 2.0. На моем сервере он:

C:\Program Files\Microsoft.Net\SDK\v2.0 64bit\Bin\makecert.exe

Вы можете создать полномочия подписи и сохранить его в репозитории сертификатов LocalMachine следующим образом (эти команды должны запускаться из учетной записи администратора или в командной строке с повышенными правами):

makecert.exe -n "CN=My Company Development Root CA,O=My Company,
 OU=Development,L=Wallkill,S=NY,C=US" -pe -ss Root -sr LocalMachine
 -sky exchange -m 120 -a sha1 -len 2048 -r

Затем вы можете создать сертификат, привязанный к вашему поддомену и подписанный новым авторитетом:

(Обратите внимание, что значение параметра -in должно быть таким же, как значение CN, используемое для генерации ваших полномочий выше.)

makecert.exe -n "CN=subdomain.example.com" -pe -ss My -sr LocalMachine
 -sky exchange -m 120 -in "My Company Development Root CA" -is Root
 -ir LocalMachine -a sha1 -eku 1.3.6.1.5.5.7.3.1

Затем ваш сертификат должен появиться в диспетчере IIS для привязки к вашему сайту, как описано в сообщении Tom Hall.

Все для этого решения Майку О'Брайену за его отличное сообщение в блоге http://www.mikeobrien.net/blog/creating-self-signed-wildcard

Ответ 2

Использование PowerShell

В Windows 8.1 и Windows Server 2012 R2 (Windows PowerShell 4.0) и выше вы можете создать самозаверяющий сертификат с помощью нового командлета New-SelfSignedCertificate:

Примеры:

New-SelfSignedCertificate -DnsName www.mydomain.com -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName subdomain.mydomain.com -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName *.mydomain.com -CertStoreLocation cert:\LocalMachine\My

Использование диспетчера IIS

  • Запустите диспетчер IIS
  • На уровне сервера в разделе IIS выберите "Сертификаты сервера"
  • С правой стороны в разделе "Действия" выберите "Создать самоподписанный сертификат"
  • Где указано "Укажите дружественное имя для сертификата" в соответствующем имени для ссылки.
    • Примеры: www.domain.com или subdomain.domain.com
  • Затем выберите свой сайт в списке слева.
  • С правой стороны в разделе Действия выберите Bindings
  • Добавьте новую привязку HTTPS и выберите только что созданный сертификат (если ваш сертификат является подстановочным сертификатом, вам нужно указать имя хоста)
  • Нажмите "ОК" и проверьте его.

Ответ 3

Чтобы создать новый сертификат для вашего конкретного домена:

Откройте Powershell ISE с правами администратора и выполните команду:

New-SelfSignedCertificate -DnsName *.mydomain.com, localhost -CertStoreLocation cert:\LocalMachine\My

Чтобы доверять новому сертификату:

  • Открыть mmc.exe
  • Перейдите в Root консоли → Сертификаты (локальный компьютер) → Личные
  • Выберите созданный сертификат, щелкните правой кнопкой мыши → Все задачи → Экспорт и следуйте указаниям мастера экспорта, чтобы создать файл .pfx.
  • Перейдите в Корень консоли → Сертификаты → Доверенные корневые центры сертификации и импортируйте новый файл .pfx.

Чтобы привязать сертификат к вашему сайту:

  • Открыть IIS Manager
  • Выберите свой сайт и выберите "Изменить сайт" → "Привязки" на правой панели.
  • Добавьте новую привязку https с правильным именем хоста и новым сертификатом

Ответ 4

Мне пришлось ломать голову над самозаверяющими сертификатами в Windows, комбинируя кусочки из приведенных ответов и дополнительных ресурсов. Вот мой собственный (и, надеюсь, полный) проходной. Надеюсь, это избавит вас от моей мучительной кривой обучения. Он также содержит информацию по смежным темам, которая появится раньше или позже, когда вы создадите свои собственные сертификаты.

Создайте самозаверяющий сертификат в Windows 10

Не используйте makecert.exe. Microsoft устарела.
Современный способ использует команду Powershell.

Windows 10:

Откройте Powershell с правами администратора:

New-SelfSignedCertificate  -DnsName "*.dev.local", "dev.local", "localhost"  -CertStoreLocation cert:\LocalMachine\My  -FriendlyName "Dev Cert *.dev.local, dev.local, localhost"  -NotAfter (Get-Date).AddYears(15)

Windows 8, Windows Server 2012 R2:

В Powershell в этих системах параметры -FriendlyName и -NotAfter не существуют. Просто удалите их из приведенной выше командной строки.
Откройте Powershell с правами администратора:

New-SelfSignedCertificate  -DnsName "*.dev.local", "dev.local", "localhost"  -CertStoreLocation cert:\LocalMachine\My

Полученный сертификат

Обе вышеперечисленные команды создают сертификат для доменов localhost и *.dev.local.
Версия Win10 дополнительно имеет время работы 15 лет и читаемое отображаемое имя "Dev Cert *.dev.local, dev.local, localhost".

Обновление: если вы -DnsName несколько записей имени хоста в параметре -DnsName (как показано выше), первая из этих записей станет субъектом домена (общее имя AKA). Полный список всех записей имени хоста будет храниться в поле Subject Alternative Name (SAN) сертификата. (Спасибо @BenSewards за то, что указал на это.)

После создания сертификат будет немедленно доступен в любых привязках HTTPS IIS (инструкции ниже).

Доверься сертификату

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

Откройте mmc.exe, Файл → Добавить/удалить оснастку → выберите "Сертификаты" в левом столбце → Добавить → выберите "Учетная запись компьютера" → Далее → "Локальный компьютер..." → Готово → ОК.

Экспортируйте ваш сертификат из вашего личного магазина

В левой колонке выберите "Сертификаты (локальный компьютер)/Личные/Сертификаты".
Найдите только что созданный сертификат (в Win 10 может помочь столбец "Дружественное имя").
Щелкните правой кнопкой мыши этот сертификат → Все задачи → Экспорт... → Далее → выберите "Нет, не экспортировать закрытый ключ" → Далее → выберите "Кодированный DER..." → Далее → введите имя файла и сохраните.

Подсказка: мы намеренно не используем формат файла PFX для экспорта. Он включит ваш закрытый ключ в файл экспорта, и вы обычно не хотите, чтобы ваш закрытый ключ уходил куда-либо!

Импортируйте свой сертификат в свой магазин доверенных корневых центров сертификации.

В левом столбце щелкните правой кнопкой мыши "Сертификаты (локальный компьютер)/доверенные корневые центры сертификации/сертификаты" → Все задачи → Импорт... → Далее → выберите только что экспортированный файл → Далее → "Поместите все сертификаты в следующее хранилище: Доверенные корневые центры сертификации "→ Далее → Готово.

Использовать в МКС

Теперь вы можете перейти в IIS Manager, выбрать привязки локального веб-сайта → Добавить → https → ввести имя хоста в форме myname.dev.local (ваш сертификат действителен только для *.dev.local) и выбрать новый сертификат. → ОК

Добавить к хостам

Также добавьте ваше имя хоста в C:\Windows\System32\drivers\etc\hosts:

127.0.0.1  myname.dev.local

Счастливый

Теперь Chrome и IE должны относиться к сертификату как к надежному и загружать ваш веб-сайт при открытии https://myname.dev.local.

Firefox поддерживает собственное хранилище сертификатов. Чтобы добавить свой сертификат здесь, вы должны открыть свой веб-сайт в FF и добавить его в исключения, когда FF предупреждает вас о сертификате.

Для браузера Edge могут потребоваться дополнительные действия (см. Ниже).

Протестируйте сертификат

Для проверки ваших сертификатов Firefox - ваш лучший выбор. (Поверьте, я сам фанат Chrome, но в этом случае FF лучше.)

Вот причины:

  • Firefox использует свой собственный кеш SSL, который очищается при повторной загрузке. Поэтому любые изменения в сертификатах ваших локальных веб-сайтов будут немедленно отражены в предупреждениях FF, в то время как другим браузерам может потребоваться перезапуск или ручная очистка кэша SSL Windows.
  • Также FF дает вам несколько полезных советов для проверки действительности вашего сертификата: Нажмите "Дополнительно", когда FF покажет предупреждение о сертификате. FF покажет вам короткий текстовый блок с одним или несколькими возможными предупреждениями в центральных строках текстового блока:

Сертификат не является доверенным, потому что он самоподписан.

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

Сертификат не действителен для имени...

Это предупреждение показывает, что вы сделали что-то не так. Домен (подстановочный знак) вашего сертификата не соответствует домену вашего сайта. Проблема должна быть решена либо путем изменения домена вашего сайта (sub-), либо путем выдачи нового сертификата, который соответствует. Фактически, вы можете добавить исключение в FF, даже если сертификат не совпадает, но вы никогда не получите зеленый символ замка в Chrome с такой комбинацией.

Firefox может отображать много других приятных и понятных предупреждений о сертификатах в этом месте, таких как сертификаты с истекшим сроком действия, сертификаты с устаревшими алгоритмами подписи и т.д. Я не нашел другого браузера, который бы дал мне такой уровень обратной связи, чтобы зафиксировать любые проблемы.

Какой (sub-) шаблон домена я должен выбрать для разработки?

В приведенной выше команде New-SelfSignedCertificate мы использовали подстановочный домен *.dev.local.

Вы можете подумать: почему бы не использовать *.local?

Простая причина: это незаконно в качестве домена подстановки.
Сертификаты подстановочных знаков должны содержать как минимум имя домена второго уровня.

Итак, домены вида *.local хороши для разработки HTTP-сайтов. Но не так много для HTTPS, потому что вы будете вынуждены выдавать новый соответствующий сертификат для каждого нового запускаемого вами проекта.

Важные примечания:

  • Допустимые домены хоста могут содержать ТОЛЬКО буквы через z, цифры, дефисы и точки. Подчеркивание не допускается! Некоторые браузеры действительно придирчивы об этом подробно и могут дать вам трудное время, когда они упорно отказываются соответствовать вашему домену motör_head.dev.local к вашему шаблону шаблону *.dev.local. Они будут соответствовать, когда вы переключитесь на motoer-head.dev.local.
  • Подстановочный знак в сертификате будет соответствовать ОДНОЙ метке (= разделу между двумя точками) в домене, но не более. *.dev.local соответствует myname.dev.local но НЕ other.myname.dev.local !
  • Многоуровневые подстановочные знаки (*.*.dev.local) НЕ возможны в сертификатах. Таким образом, other.myname.dev.local может быть закрыт только подстановочным знаком в форме *.myname.dev.local. В результате лучше не использовать доменную часть четвертого уровня. Поместите все свои вариации в часть третьего уровня. Таким образом, вы получите один сертификат для всех ваших сайтов разработчиков.

Проблема с краем

Это не совсем о самозаверяющих сертификатах, но все же относится ко всему процессу:
После выполнения вышеуказанных действий Edge может не отображать содержимое при открытии myname.dev.local.
Причиной является характерная особенность сетевого управления Windows 10 для современных приложений, называемая "изоляция сети".

Чтобы решить эту проблему, откройте командную строку с правами администратора и введите следующую команду один раз:

CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe

Дополнительную информацию об Edge и сетевой изоляции можно найти здесь: https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/

Ответ 5

Я столкнулся с этой проблемой, когда хотел включить SSL для проекта, размещенного в IIS 8. Наконец, я использовал OpenSSL, после многих дней борьбы с командами makecert. Сертификат создается в Debian, но я могу легко импортировать его в IIS 7 и 8.

Загрузите OpenSSL, совместимый с вашей ОС, и this файл конфигурации. Задайте конфигурационный файл как стандартную конфигурацию OpenSSL.

Сначала мы создадим закрытый ключ и сертификат Центра сертификации (CA). Этот сертификат должен подписать запрос сертификата (CSR).

Вы должны заполнить все поля, необходимые для этого процесса.

  • openssl req -new -x509 -days 3650 -extensions v3_ca -keyout root-cakey.pem -out root-cacert.pem -newkey rsa:4096

Вы можете создать файл конфигурации с настройками по умолчанию, например: Теперь мы сгенерируем запрос сертификата, который является файлом, который отправляется в органы сертификации.

Общее имя должно быть установлено в домене вашего сайта, например: public.organization.com.

  1. openssl req -new -nodes -out server-csr.pem -keyout server-key.pem -newkey rsa:4096

Теперь запрос сертификата подписан сгенерированным сертификатом ЦС.

  1. openssl x509 -req -days 365 -CA root-cacert.pem -CAkey root-cakey.pem -CAcreateserial -in server-csr.pem -out server-cert.pem

Сгенерированный сертификат должен быть экспортирован в файл .pfx, который может быть импортирован в IIS.

  1. openssl pkcs12 -export -out server-cert.pfx -inkey server-key.pem -in server-cert.pem -certfile root-cacert.pem -name "Self Signed Server Certificate"

На этом шаге мы импортируем сертификат CA.

  1. На вашем сервере необходимо импортировать сертификат ЦС в доверенные корневые центры сертификации, поскольку IIS может доверять импортируемому сертификату. Помните, что сертификат, который должен быть импортирован в IIS, был подписан с сертификатом CA.

    • Откройте командную строку и введите mmc.
    • Нажмите Файл.
    • Выберите Добавить/удалить привязку в....
    • Дважды щелкните Сертификаты.
    • Выберите Учетная запись компьютера и Далее → .
    • Выберите Локальный компьютер и Готово.
    • Ok.
    • Перейдите в Сертификаты Доверенные корневые центры сертификации Сертификаты, нажмите на Сертификаты и выберите Все задачи Импорт...

enter image description here

  • Выберите Далее Обзор...
  • Вы должны выбрать Все файлы, чтобы просмотреть местоположение файла root-cacert.pem.
  • Нажмите Далее и выберите Поместить все сертификаты в следующее хранилище: доверенные корневые центры сертификации.
  • Нажмите Далее и Готово.

enter image description here

На этом шаге доверие IIS к подлинности нашего сертификата.

  1. На нашем последнем этапе мы импортируем сертификат в IIS и добавим сайт привязки.

    • Откройте Диспетчер служб IIS или введите inetmgr в командной строке и перейдите в Сертификаты сервера.
    • Нажмите Импорт....
    • Задайте путь к файлу .pfx, кодовой фразе и выберите хранилище сертификатов Веб-хостинг.

enter image description here

  • Нажмите ОК.
  • Теперь перейдите на свой сайт в диспетчере IIS и выберите Привязки... и Добавить новую привязку.

  • Выберите https как тип привязки, и вы сможете увидеть импортированный сертификат.

  • Нажмите ОК, и все будет сделано.

enter image description here

Ответ 6

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

В диспетчере IIS

  • Нажмите имя машины node
  • Открыть сертификаты сервера
  • В панели "Действия" выберите "Создать самоподписанный сертификат"
  • В "Укажите дружественное имя..." назовите его * Dev (выберите "Личное" из списка типов)
  • Сохранить

Теперь, на вашем сайте в IIS...

  • Управление привязками
  • Создайте новое связывание для Https
  • Выберите свой самозаверяющий сертификат из списка
  • После выбора, имя домена будет включено, и вы сможете ввести свое доменное имя.

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

Ответ 7

Другим простым способом создания самоподписанного сертификата является использование Jexus Manager,

Jexus Manager

  • Выберите сервер node на панели "Подключения".
  • На средней панели нажмите значок "Сертификаты сервера", чтобы открыть страницу управления.
  • В панели "Действия" выберите пункт "Сгенерировать самоподписанный сертификат...".

https://www.jexusmanager.com/en/latest/tutorials/self-signed.html