Мне пришлось ломать голову над самозаверяющими сертификатами в 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
Альтернативой является использование метода для более старой версии Windows ниже, который позволяет использовать все функции Win 10 для создания сертификатов ...
Старые версии Windows:
Моя рекомендация для более старых версий Windows - создать сертификат на машине Win 10, экспортировать его в файл .PFX с помощью экземпляра mmc (см. «Доверять сертификату» ниже) и импортировать его в хранилище сертификатов на целевой машине с старая ОС Windows. Чтобы импортировать сертификат, НЕ щелкайте его правой кнопкой мыши. Хотя в контекстном меню есть пункт «Импортировать сертификат», все мои попытки использовать его на Win Server 2008 не удалось. Вместо этого откройте другой экземпляр mmc на целевом компьютере, перейдите в «Сертификаты (локальный компьютер) / Персональные / Сертификаты» щелкните правой кнопкой мыши среднюю панель и выберите Все задачи → Импорт.
Полученный сертификат
Обе приведенные выше команды создают сертификат для доменов localhost
и *.dev.local
.
Версия Win10 дополнительно имеет срок жизни 15 лет и читаемое отображаемое имя «Dev Cert * .dev.local, dev.local, localhost».
Обновление: если вы укажете несколько записей имени хоста в параметре -DnsName
(как показано выше), первая из этих записей станет субъектом домена (AKA Common Name). Полный список всех записей имен хостов будет храниться в поле Subject Alternative Name (SAN) сертификата. (Спасибо @BenSewards за указание на это.)
После создания сертификат будет сразу доступен в любых HTTPS-привязках IIS (инструкции ниже).
Доверяйте сертификату
Новый сертификат не является частью какой-либо цепочки доверия и поэтому не считается заслуживающим доверия ни одним браузером. Чтобы изменить это, мы скопируем сертификат в хранилище сертификатов для доверенных корневых центров сертификации на вашем компьютере:
Откройте mmc.exe, Файл → Добавить / удалить оснастку → выберите «Сертификаты» в левом столбце → Добавить → выберите «Учетная запись компьютера» → Далее → «Локальный компьютер ...» → Готово → ОК
В левом столбце выберите «Сертификаты (локальный компьютер) / Личный / Сертификаты».
Найдите только что созданный сертификат (в Win 10 может помочь столбец «Понятное имя»).
Выберите этот сертификат и нажмите Ctrl-C, чтобы скопировать его в буфер обмена.
В левом столбце выберите «Сертификаты (локальный компьютер) / Доверенные корневые центры сертификации / Сертификаты».
Нажмите Ctrl-V, чтобы вставить сертификат в это хранилище.
Сертификат должен появиться в списке доверенных корневых центров и теперь считается заслуживающим доверия.
Использование в IIS
Теперь вы можете перейти в диспетчер 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 - лучший выбор для проверки ваших сертификатов. (Поверьте, я сам фанат Chrome, но в данном случае FF лучше.)
Вот причины:
- Firefox использует свой собственный кеш SSL, который очищается при смене-перезагрузке. Таким образом, любые изменения сертификатов ваших локальных веб-сайтов будут немедленно отражены в предупреждениях FF, в то время как другим браузерам может потребоваться перезагрузка или ручная очистка кеша SSL Windows.
- Также FF дает вам несколько ценных советов для проверки действительности вашего сертификата: нажмите «Дополнительно», когда FF покажет предупреждение о сертификате. FF покажет вам короткий текстовый блок с одним или несколькими возможными предупреждениями в центральных строках текстового блока:
Сертификат не является доверенным, поскольку он самоподписанный.
Это предупреждение верно! Как отмечалось выше, Firefox не использует хранилище сертификатов Windows и будет доверять этому сертификату только в том случае, если вы добавите для него исключение. Кнопка для этого находится прямо под предупреждениями.
Сертификат недействителен на имя ...
Это предупреждение показывает, что вы сделали что-то не так. Домен (подстановочный знак) вашего сертификата не соответствует домену вашего веб-сайта. Проблема должна быть решена либо путем изменения (под) домена вашего веб-сайта, либо путем выпуска нового сертификата, который соответствует. Фактически вы можете добавить исключение в FF, даже если сертификат не соответствует, но вы никогда не получите зеленый символ замка в Chrome с такой комбинацией.
Firefox может отображать множество других приятных и понятных предупреждений о сертификатах в этом месте, например, сертификаты с истекшим сроком действия, сертификаты с устаревшими алгоритмами подписи и т. Д. Я не нашел другого браузера, который дал бы мне такой уровень обратной связи, чтобы решить какие-либо проблемы.
Какой шаблон (под) домена мне выбрать для разработки?
В приведенной выше команде New-SelfSignedCertificate мы использовали подстановочный домен *.dev.local
.
Вы можете подумать: а почему бы не использовать *.local
?
Простая причина: это незаконный домен с подстановочными знаками.
Сертификаты с подстановочными знаками должны содержать как минимум доменное имя второго уровня.
Итак, домены формы *.local
удобны для разработки веб-сайтов HTTP. Но не так много для HTTPS, потому что вам придется выдавать новый соответствующий сертификат для каждого нового проекта, который вы запускаете.
Важные примечания:
- Допустимые домены хоста могут содержать ТОЛЬКО буквы от a до 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
На самом деле это не касается самозаверяющих сертификатов, но все же связано со всем процессом:
после выполнения вышеуказанных шагов 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/
makecert.exe
чтобы оказаться на моем пути. Что касается сертификатов, я думал, что буду более безопасным и использую-a SHA512 -len 8192
- на создание этого сертификата ушла целая вечность. И, как я и подозревал, это никак не повлияло на уровень шифрования, который использует IIS. По умолчанию IIS использует 128-битный режим, чтобы изменить это , вам нужно выполнить групповую политику . Еще одно замечание для других читателей: не меняйте магические числа после-eku
, они необходимы.