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

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

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

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

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

С помощью функции самозаверяющего сертификата 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

Использование 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

  1. Запустить диспетчер IIS
  2. На уровне сервера в разделе IIS выберите Сертификаты сервера
  3. С правой стороны в разделе «Действия» выберите «Создать самоподписанный сертификат»
  4. Там, где указано «Укажите дружественное имя для сертификата» в соответствующем имени для ссылки.
    1. Примеры: www.domain.com или subdomain.domain.com
  5. Затем выберите свой сайт из списка с левой стороны
  6. С правой стороны в разделе Действия выберите Bindings
  7. Добавьте новую привязку HTTPS и выберите только что созданный сертификат (если ваш сертификат является подстановочным сертификатом, вам нужно указать имя хоста)
  8. Нажмите «ОК» и проверьте его.

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

Откройте Powershell ISE в качестве администратора, запустите команду:

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

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

Открыть mmc.exe

Перейти к корню консоли -> сертификаты (локальный компьютер) -> личные

Выберите созданный сертификат, щелкните правой кнопкой мыши -> Все задачи -> Экспорт и следуйте за мастером экспорта, чтобы создать файл .pfx

Перейдите в Корень консоли -> Сертификаты -> Доверенные корневые центры сертификации и импортируйте новый .pfx-файл

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

Открыть диспетчер IIS

Выберите свой сайт и выберите «Изменить сайт» -> «Привязки» в правой панели

Добавьте новое привязку https с правильным именем хоста и новым сертификатом

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

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

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

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

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

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

В Common Name должен быть указан домен вашего сайта, например: 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, был подписан с сертификатом ЦС.

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

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

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

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

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

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

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

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

  • Нажмите « ОК» .
  • Теперь перейдите на свой сайт в диспетчере IIS и выберите Bindings … и добавьте новое связывание.

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

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

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

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

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

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

Windows 10:

Open 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 не существуют. Просто удалите их из приведенной выше командной строки.
Open 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 encoded …» → Далее → введите имя файла и сохраните.

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

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

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

Использование в МКС

Теперь вы можете перейти в диспетчер IIS, выбрать привязки локального веб-сайта → Добавить → 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 – ваш лучший выбор по нескольким причинам:

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

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

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

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

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

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

Какую (суб) модель домена я должен выбрать для разработки?

В вышеупомянутой команде 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 многоуровневые подстановочные знаки ( *.*.dev.local ). Таким образом, other.myname.dev.local может быть покрыт только подстановочным знаком формы *.myname.dev.local . В результате лучше не использовать четвертую часть домена. Поместите все ваши варианты в часть третьего уровня. Таким образом, вы получите один сертификат для всех ваших сайтов-разработчиков.

Проблема с Edge

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

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

 CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe 

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

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

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

  1. Нажмите узел имени машины
  2. Открыть сертификаты сервера
  3. В панели «Действия» выберите «Создать самоподписанный сертификат»,
  4. В поле «Укажите дружественное имя …» назовите его * Dev (выберите «Личное» из списка типов)
  5. Сохранить

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

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

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

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

Менеджер Jexus

  1. Выберите узел сервера на панели «Подключения».
  2. На средней панели нажмите значок «Сертификаты сервера», чтобы открыть страницу управления.
  3. В разделе «Действия» нажмите «Создать самоподписанный сертификат …».

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

Самоподписанный сертификат можно создать с помощью одной строки с помощью сценария PowerShell с помощью командлета ниже.

Командлет: New-SelfSignedCertificate

Пример: New-SelfSignedCertificate -FriendlyName USProd_Certif -DnsName PRODCD-USCertificate -CertStoreLocation Cert: \ LocalMachine \ My

Пример: http://dotnet-helpers.com/powershell/create-custom-name-self-signed-certificate-using-powershell/

  • Извлечение открытого / закрытого ключа из файла PKCS12 для последующего использования в SSH-PK-аутентификации
  • Как установить доверенный сертификат CA на Android-устройство?
  • Вставка сертификата (с закрытым ключом) в корне, хранилище сертификатов LocalMachine не выполняется в .NET 4
  • Ошибки консоли. Не удалось загрузить ресурс: net :: ERR_INSECURE_RESPONSE
  • Преобразование традиционного частного ключа PEM в закрытый ключ PKCS8
  • Получить список сертификатов из хранилища сертификатов в C #
  • Сертификату SSL не доверяют - только на мобильных телефонах
  • Как создать самозаверяющий сертификат с помощью C #?
  • Как предоставить ASP.NET доступ к закрытому ключу в сертификате в хранилище сертификатов?
  • Не удалось создать путь PKIX: не удалось найти допустимый путь сертификации для запрошенной цели
  • Android Studio - отладочное хранилище
  • Давайте будем гением компьютера.