Мені довелося розбирати головоломку через самопідписані сертифікати для 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 для створення cert ...
Старіші версії Windows:
Моя рекомендація для старих версій Windows - створити cert на машині Win 10, експортувати його у файл .PFX за допомогою екземпляра mmc (див. "Довіряти сертифікату" нижче) та імпортувати його в сховище cert на цільовій машині за допомогою стара ОС Windows. Щоб імпортувати cert, НЕ клацніть його правою кнопкою миші. Хоча в контекстному меню є пункт "Імпорт сертифіката", він не зміг усі мої випробування використовувати його на Win Server 2008. Замість цього відкрийте інший екземпляр mmc на цільовій машині, перейдіть до пункту "Сертифікати (локальний комп'ютер) / Особисті / Сертифікати" , клацніть правою кнопкою миші на середній панелі та виберіть Усі завдання → Імпорт.
Отриманий сертифікат
Обидві вищевказані команди створюють сертифікат для доменів localhost
і *.dev.local
.
Крім того, у версії Win10 додатково передбачено тривалість роботи 15 років та читабельну назву "Dev Cert * .dev.local, dev.local, localhost".
Оновлення: Якщо ви введете кілька параметрів імені хоста в параметрі -DnsName
(як показано вище), перша з цих записів стане Темою домену (Загальна назва AKA). Повний список усіх записів імені хоста буде зберігатися у полі Альтернативна назва предмета (SAN) сертифіката. (Дякуємо @BenSewards, що вказали на це.)
Після створення сертифікат буде негайно доступний у будь-яких HTTPS-прив'язках IIS (інструкції нижче).
Довіряйте сертифікату
Новий сертифікат не є частиною жодної ланцюга довіри, і тому браузери не вважаються надійними. Щоб змінити це, ми скопіюємо сертифікат у сховище сертифікатів для довірених кореневих серверів на вашій машині:
Відкрийте mmc.exe, файл → Додати / видалити оснащення → виберіть "Сертифікати" у лівій колонці → Додати → виберіть "Обліковий запис комп'ютера" → Далі → "Місцевий комп'ютер ..." → Завершити → ОК
У лівій колонці виберіть "Сертифікати (локальний комп'ютер) / Особисті / Сертифікати".
Знайдіть новостворений сертифікат (у програмі Win 10 стовпець "Дружнє ім'я" може допомогти).
Виберіть цей сертифікат і натисніть Ctrl-C, щоб скопіювати його у буфер обміну.
У лівій колонці виберіть "Сертифікати (локальний комп'ютер) / довірені кореневі адміністративні центри / сертифікати".
Натисніть Ctrl-V, щоб вставити свій сертифікат у цей магазин.
Сертифікат повинен міститись у списку довірених кореневих властей і тепер вважається надійним.
Використання в IIS
Тепер ви можете зайти до менеджера IIS, вибрати прив'язки локального веб-сайту → Додати → https → ввести ім'я хосту форми myname.dev.local
(ваш сервер дійсний лише для *.dev.local
) та вибрати новий сертифікат → ОК.
Додати в хости
Також додайте ім'я хоста до C: \ Windows \ System32 \ driver \ 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, тоді як іншим браузерам може знадобитися перезапуск або ручна очистка кешу Windows SSL.
- Також FF дає кілька цінних підказок, щоб перевірити дійсність вашого сертифіката: Клацніть на Розширено, коли FF показує своє попередження про сертифікат. FF покаже вам короткий текстовий блок з одним або декількома можливими попередженнями в центральних рядках текстового блоку:
Сертифікату не довіряють, оскільки він підписаний самостійно.
Це попередження правильне! Як зазначалося вище, Firefox не використовує сховище сертифікатів Windows і довірятиме цьому сертифікату лише у тому випадку, якщо ви додасте до нього виняток. Кнопка для цього знаходиться прямо під попередженнями.
Сертифікат не дійсний для імені ...
Це попередження показує, що ви щось зробили не так. Домен (wildcard) вашого сертифіката не відповідає домену вашого веб-сайту. Проблему потрібно вирішити, змінивши (під) домен вашого веб-сайту або видавши новий сертифікат, який відповідає. Насправді ви можете додати виняток у FF, навіть якщо сертифікат не відповідає, але ви ніколи не отримаєте зелений символ замка в Chrome з такою комбінацією.
Firefox може відображати в цьому місці безліч інших приємних і зрозумілих попереджень cert, таких як термін з минулим терміном, certs із застарілими алгоритмами підписання і т.д.
Який (під-) доменний шаблон слід вибрати?
У наведеній вище команді New-SelfSignedCertificate ми використовували домен wildcard *.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
Мова йде не про самопідписані сертифікати, але все-таки пов'язані з усім процесом:
Після виконання вищезазначених кроків Edge може не відображати жодного вмісту при відкритті myname.dev.local
.
Причиною є характерна особливість управління мережею Windows 10 для сучасних додатків, яка називається «Мережева ізоляція».
Щоб вирішити цю проблему, відкрийте командний рядок з правами адміністратора та введіть один раз таку команду:
CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe
Більше інформації про ізоляцію країв та мереж можна знайти тут:
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
, вони потрібні.