Musiałem przedzierać się przez samopodpisane certyfikaty w systemie Windows, łącząc fragmenty z udzielonych odpowiedzi i dalszych zasobów. Oto moje własne (i mam nadzieję, że kompletne) przejście. Mam nadzieję, że oszczędzi ci to mojej własnej bolesnej krzywej uczenia się. Zawiera również informacje dotyczące powiązanych tematów, które pojawią się prędzej czy później, gdy utworzysz własne certyfikaty.
Utwórz certyfikat z podpisem własnym w systemie Windows 10 i starszych
Nie używaj makecert.exe. Został wycofany przez firmę Microsoft.
Nowoczesny sposób wykorzystuje polecenie Powershell.
Windows 10:
Otwórz Powershell z uprawnieniami administratora:
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:
W programie PowerShell w tych systemach parametry -FriendlyName i -NotAfter nie istnieją. Po prostu usuń je z powyższego wiersza poleceń.
Otwórz Powershell z uprawnieniami administratora:
New-SelfSignedCertificate -DnsName "*.dev.local", "dev.local", "localhost" -CertStoreLocation cert:\LocalMachine\My
Alternatywą jest użycie metody dla starszej wersji systemu Windows poniżej, która umożliwia wykorzystanie wszystkich funkcji Win 10 do tworzenia certyfikatów ...
Starsze wersje systemu Windows:
Moją rekomendacją dla starszych wersji systemu Windows jest utworzenie certyfikatu na komputerze z systemem Windows 10, wyeksportowanie go do pliku .PFX przy użyciu instancji mmc (zobacz „Zaufaj certyfikatowi” poniżej) i zaimportowanie go do magazynu certyfikatów na komputerze docelowym z stary system operacyjny Windows. Aby zaimportować certyfikat, NIE klikaj go prawym przyciskiem myszy. Chociaż w menu kontekstowym znajduje się pozycja „Importuj certyfikat”, wszystkie moje próby użycia go na Win Server 2008 nie powiodły się. Zamiast tego otwórz inną instancję mmc na komputerze docelowym, przejdź do „Certyfikaty (komputer lokalny) / Osobiste / Certyfikaty” , kliknij prawym przyciskiem myszy w środkowym okienku i wybierz Wszystkie zadania → Importuj.
Uzyskany certyfikat
Oba powyższe polecenia tworzą certyfikat dla domen localhost
i *.dev.local
.
Wersja dla Win10 dodatkowo ma 15-letni okres eksploatacji i czytelną wyświetlaną nazwę „Dev Cert * .dev.local, dev.local, localhost”.
Aktualizacja: Jeśli podasz wiele wpisów nazwy hosta w parametrze -DnsName
(jak pokazano powyżej), pierwszy z tych wpisów stanie się tematem domeny (nazwa zwykła AKA). Pełna lista wszystkich wpisów nazw hostów będzie przechowywana w polu Alternatywna nazwa podmiotu (SAN) certyfikatu. (Dzięki @BenSewards za wskazanie tego).
Po utworzeniu certyfikat będzie natychmiast dostępny we wszystkich powiązaniach HTTPS usług IIS (instrukcje poniżej).
Zaufaj certyfikatowi
Nowy certyfikat nie jest częścią żadnego łańcucha zaufania i dlatego żadna przeglądarka nie uważa go za wiarygodny. Aby to zmienić, skopiujemy certyfikat do magazynu certyfikatów zaufanych głównych urzędów certyfikacji na Twoim komputerze:
Otwórz mmc.exe, Plik → Dodaj / Usuń przystawkę → wybierz „Certyfikaty” w lewej kolumnie → Dodaj → wybierz „Konto komputera” → Dalej → „Komputer lokalny…” → Zakończ → OK
W lewej kolumnie wybierz „Certyfikaty (komputer lokalny) / Osobiste / Certyfikaty”.
Znajdź nowo utworzony certyfikat (w Win 10 może pomóc kolumna „Przyjazna nazwa”).
Wybierz ten certyfikat i naciśnij Ctrl-C, aby skopiować go do schowka.
W lewej kolumnie wybierz „Certyfikaty (komputer lokalny) / Zaufane główne urzędy certyfikacji / Certyfikaty”.
Naciśnij Ctrl-V, aby wkleić certyfikat do tego sklepu.
Certyfikat powinien pojawić się na liście zaufanych głównych urzędów i jest teraz uważany za godny zaufania.
Użyj w usługach IIS
Teraz możesz przejść do Menedżera IIS, wybrać powiązania lokalnej witryny internetowej → Dodaj → https → wprowadź nazwę hosta formularza myname.dev.local
(Twój certyfikat jest ważny tylko dla *.dev.local
) i wybierz nowy certyfikat → OK.
Dodaj do hostów
Dodaj także nazwę swojego hosta do C: \ Windows \ System32 \ drivers \ etc \ hosts:
127.0.0.1 myname.dev.local
Szczęśliwy
Teraz Chrome i IE powinny traktować certyfikat jako godny zaufania i ładować Twoją witrynę podczas otwierania https://myname.dev.local
.
Firefox utrzymuje własny magazyn certyfikatów. Aby dodać tutaj swój certyfikat, musisz otworzyć swoją witrynę w FF i dodać ją do wyjątków, gdy FF ostrzega Cię o certyfikacie.
W przypadku przeglądarki Edge może być potrzebne więcej działań (patrz poniżej).
Przetestuj certyfikat
Aby przetestować swoje certyfikaty, najlepszym wyborem jest Firefox. (Uwierz mi, sam jestem fanem Chrome, ale w tym przypadku FF jest lepszy).
Oto powody:
- Firefox używa własnej pamięci podręcznej SSL, która jest czyszczona po przeładowaniu przez shift. Tak więc wszelkie zmiany w certyfikatach lokalnych witryn internetowych zostaną natychmiast odzwierciedlone w ostrzeżeniach FF, podczas gdy inne przeglądarki mogą wymagać ponownego uruchomienia lub ręcznego wyczyszczenia pamięci podręcznej SSL systemu Windows.
- FF daje również cenne wskazówki, jak sprawdzić ważność twojego certyfikatu: Kliknij Zaawansowane, gdy FF wyświetli ostrzeżenie o certyfikacie. FF pokaże ci krótki blok tekstowy z jednym lub więcej możliwymi ostrzeżeniami w środkowych liniach bloku tekstu:
Certyfikat nie jest zaufany, ponieważ jest podpisany samodzielnie.
To ostrzeżenie jest poprawne! Jak wspomniano powyżej, Firefox nie korzysta z magazynu certyfikatów systemu Windows i będzie ufał temu certyfikatowi tylko wtedy, gdy dodasz do niego wyjątek. Przycisk służący do tego znajduje się tuż pod ostrzeżeniami.
Certyfikat nie jest ważny dla nazwy ...
To ostrzeżenie pokazuje, że zrobiłeś coś złego. Domena (z symbolem wieloznacznym) Twojego certyfikatu nie jest zgodna z domeną Twojej witryny. Problem należy rozwiązać, zmieniając (pod) domenę witryny lub wydając nowy, zgodny certyfikat. W rzeczywistości możesz dodać wyjątek w FF, nawet jeśli certyfikat nie pasuje, ale nigdy nie dostaniesz zielonego symbolu kłódki w Chrome z taką kombinacją.
Firefox może wyświetlać w tym miejscu wiele innych ładnych i zrozumiałych ostrzeżeń dotyczących certyfikatów, takich jak wygasłe certyfikaty, certyfikaty z nieaktualnymi algorytmami podpisywania itp. Nie znalazłem żadnej innej przeglądarki, która dałaby mi taki poziom informacji zwrotnych, aby rozwiązać wszelkie problemy.
Który wzorzec (pod) domeny powinienem wybrać do opracowania?
W powyższym poleceniu New-SelfSignedCertificate użyliśmy domeny wieloznacznej *.dev.local
.
Możesz pomyśleć: dlaczego nie użyć *.local
?
Prosty powód: jest nielegalna jako domena wieloznaczna.
Certyfikaty z symbolami wieloznacznymi muszą zawierać co najmniej nazwę domeny drugiego poziomu.
Tak więc domeny formularza *.local
są dobre do tworzenia witryn HTTP. Ale nie tak bardzo w przypadku HTTPS, ponieważ byłbyś zmuszony wydać nowy pasujący certyfikat dla każdego nowego projektu, który zaczynasz.
Ważne uwagi dodatkowe:
- Prawidłowe domeny hosta mogą zawierać TYLKO litery od a do z, cyfry, łączniki i kropki. Żadne podkreślenia nie są dozwolone! Niektóre przeglądarki są naprawdę wybredne, jeśli chodzi o ten szczegół i mogą sprawić Ci kłopot, gdy uparcie odmawiają dopasowania Twojej domeny
motör_head.dev.local
do wzorca wieloznacznego *.dev.local
. Będą zgodne, gdy przełączysz się na motoer-head.dev.local
.
- Symbol wieloznaczny w certyfikacie będzie pasował tylko do JEDNEJ etykiety (= sekcji między dwiema kropkami) w domenie, nigdy więcej.
*.dev.local
mecze, myname.dev.local
ale NIE other.myname.dev.local
!
- Wielopoziomowe symbole wieloznaczne (
*.*.dev.local
) NIE są możliwe w certyfikatach. Więc other.myname.dev.local
może być pokryte tylko przez symbol wieloznaczny formularza *.myname.dev.local
. W rezultacie najlepiej nie używać części domeny czwartego poziomu. Umieść wszystkie swoje odmiany w części trzeciego poziomu. W ten sposób otrzymasz jeden certyfikat dla wszystkich swoich witryn deweloperskich.
Problem z Edge
Tak naprawdę nie chodzi o certyfikaty z podpisem własnym, ale nadal jest to związane z całym procesem:
po wykonaniu powyższych kroków Edge może nie wyświetlać żadnych treści po otwarciu myname.dev.local
.
Powodem jest charakterystyczna cecha zarządzania siecią Windows 10 dla nowoczesnych aplikacji, zwana „izolacją sieci”.
Aby rozwiązać ten problem, otwórz wiersz polecenia z uprawnieniami administratora i wprowadź raz następujące polecenie:
CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe
Więcej informacji o krawędzi i izolacji sieci można znaleźć tutaj:
https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/
makecert.exe
aby znaleźć się na mojej ścieżce. Wydawało mi się, że w przypadku certyfikatów będę bezpieczniejszy i korzystniejszy-a SHA512 -len 8192
- wygenerowanie trwało wieczność. I tak jak podejrzewałem, nie miało to żadnego wpływu na poziom szyfrowania używany przez IIS. Domyślnie IIS używa 128-bitów, aby to zmienić , musisz zrobić rzeczy związane z zasadami grupy . Kolejna uwaga dla innych czytelników: nie zmieniaj później magicznych liczb-eku
, są one wymagane.