Ho dovuto risolvere i problemi attraverso i certificati autofirmati su Windows combinando bit e pezzi dalle risposte fornite e ulteriori risorse. Ecco la mia guida (e si spera completa). Spero che ti risparmi un po 'della mia dolorosa curva di apprendimento. Contiene anche informazioni su argomenti correlati che appariranno prima o poi quando creerai i tuoi certificati.
Crea un certificato autofirmato su Windows 10 e versioni precedenti
Non utilizzare makecert.exe. È stato deprecato da Microsoft.
Il modo moderno utilizza un comando Powershell.
Windows 10:
Apri Powershell con privilegi di amministratore:
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:
In Powershell su questi sistemi i parametri -FriendlyName e -NotAfter non esistono. Rimuovili semplicemente dalla riga di comando sopra.
Apri Powershell con privilegi di amministratore:
New-SelfSignedCertificate -DnsName "*.dev.local", "dev.local", "localhost" -CertStoreLocation cert:\LocalMachine\My
Un'alternativa è utilizzare il metodo per la versione precedente di Windows di seguito, che consente di utilizzare tutte le funzionalità di Win 10 per la creazione di certificati ...
Versioni precedenti di Windows:
Il mio consiglio per le versioni precedenti di Windows è di creare il certificato su una macchina Win 10, esportarlo in un file .PFX utilizzando un'istanza mmc (vedere "Considera attendibile il certificato" di seguito) e importarlo nell'archivio certificati sulla macchina di destinazione con il vecchio sistema operativo Windows. Per importare il certificato NON fare clic con il pulsante destro del mouse. Sebbene sia presente una voce "Importa certificato" nel menu di scelta rapida, non è stato possibile utilizzare tutte le mie prove per utilizzarlo su Win Server 2008. Invece aprire un'altra istanza mmc sul computer di destinazione, accedere a "Certificati (computer locale) / Personale / Certificati" , fare clic con il pulsante destro del mouse nel riquadro centrale e selezionare Tutte le attività → Importa.
Il certificato risultante
Entrambi i comandi precedenti creano un certificato per i domini localhost
e *.dev.local
.
La versione Win10 ha inoltre una durata live di 15 anni e un nome visualizzato leggibile di "Dev Cert * .dev.local, dev.local, localhost".
Aggiornamento: se fornisci più voci del nome host nel parametro -DnsName
(come mostrato sopra), la prima di queste voci diventerà l'oggetto del dominio (AKA Common Name). L'elenco completo di tutte le voci del nome host verrà memorizzato nel campo SAN (Subject Alternative Name) del certificato. (Grazie a @BenSewards per averlo sottolineato.)
Dopo la creazione il certificato sarà immediatamente disponibile in tutti i collegamenti HTTPS di IIS (istruzioni di seguito).
Considera attendibile il certificato
Il nuovo certificato non fa parte di alcuna catena di fiducia e quindi non è considerato affidabile da alcun browser. Per cambiarlo, copieremo il certificato nell'archivio certificati per CA radice attendibili sul tuo computer:
Apri mmc.exe, File → Aggiungi / Rimuovi snap-in → scegli "Certificati" nella colonna di sinistra → Aggiungi → scegli "Account computer" → Avanti → "Computer locale ..." → Fine → OK
Nella colonna di sinistra scegli "Certificati (computer locale) / Personale / Certificati".
Trova il certificato appena creato (in Win 10 la colonna "Nome descrittivo" può aiutare).
Seleziona questo certificato e premi Ctrl-C per copiarlo negli appunti.
Nella colonna di sinistra scegli "Certificati (computer locale) / CA radice attendibili / Certificati".
Premi Ctrl-V per incollare il tuo certificato in questo negozio.
Il certificato dovrebbe apparire nell'elenco delle Autorità radice attendibili ed è ora considerato affidabile.
Usa in IIS
Ora puoi andare a Gestione IIS, selezionare i collegamenti di un sito web locale → Aggiungi → https → inserisci un nome host del modulo myname.dev.local
(il tuo certificato è valido solo per *.dev.local
) e seleziona il nuovo certificato → OK.
Aggiungi agli host
Aggiungi anche il tuo nome host a C: \ Windows \ System32 \ drivers \ etc \ hosts:
127.0.0.1 myname.dev.local
Contento
Ora Chrome e IE dovrebbero considerare il certificato come affidabile e caricare il tuo sito web quando apri https://myname.dev.local
.
Firefox mantiene il proprio archivio certificati. Per aggiungere il tuo certificato qui, devi aprire il tuo sito web in FF e aggiungerlo alle eccezioni quando FF ti avvisa del certificato.
Per il browser Edge potrebbero essere necessarie ulteriori azioni (vedere più in basso).
Prova il certificato
Per testare i tuoi certificati, Firefox è la scelta migliore. (Credimi, anch'io sono un fan di Chrome, ma FF è meglio in questo caso.)
Ecco i motivi:
- Firefox utilizza la propria cache SSL, che viene eliminata durante la ricarica del turno. Quindi qualsiasi modifica ai certificati dei tuoi siti web locali si rifletterà immediatamente negli avvisi di FF, mentre altri browser potrebbero richiedere un riavvio o un'eliminazione manuale della cache SSL di Windows.
- Inoltre FF ti dà alcuni preziosi suggerimenti per verificare la validità del tuo certificato: Clicca su Avanzate quando FF mostra il suo avviso di certificato. FF ti mostrerà un breve blocco di testo con uno o più possibili avvisi nelle righe centrali del blocco di testo:
Il certificato non è attendibile perché è autofirmato.
Questo avviso è corretto! Come notato sopra, Firefox non utilizza l'archivio certificati di Windows e si fida di questo certificato solo se si aggiunge un'eccezione. Il pulsante per farlo si trova proprio sotto gli avvisi.
Il certificato non è valido per il nome ...
Questo avviso mostra che hai fatto qualcosa di sbagliato. Il dominio (carattere jolly) del certificato non corrisponde al dominio del tuo sito web. Il problema deve essere risolto modificando il (sotto) dominio del tuo sito web o emettendo un nuovo certificato corrispondente. In effetti potresti aggiungere un'eccezione in FF anche se il certificato non corrisponde, ma non otterrai mai il simbolo di un lucchetto verde in Chrome con una tale combinazione.
Firefox può visualizzare molti altri avvisi sui certificati simpatici e comprensibili in questo posto, come certificati scaduti, certificati con algoritmi di firma obsoleti, ecc. Non ho trovato nessun altro browser che mi abbia fornito quel livello di feedback per individuare eventuali problemi.
Quale pattern (sotto) dominio dovrei scegliere di sviluppare?
Nel comando New-SelfSignedCertificate sopra abbiamo usato il dominio jolly *.dev.local
.
Potresti pensare: perché non usare *.local
?
Semplice motivo: è illegale come dominio con caratteri jolly.
I certificati con caratteri jolly devono contenere almeno un nome di dominio di secondo livello.
Quindi, i domini del modulo *.local
sono utili per sviluppare siti Web HTTP. Ma non tanto per HTTPS, perché saresti costretto a emettere un nuovo certificato di corrispondenza per ogni nuovo progetto che avvii.
Importanti note a margine:
- I domini host validi possono contenere SOLO lettere dalla a alla z, cifre, trattini e punti. Non sono ammessi trattini bassi! Alcuni browser sono molto esigenti su questo dettaglio e possono creare difficoltà quando si rifiutano ostinatamente di abbinare il tuo dominio
motör_head.dev.local
al tuo pattern jolly *.dev.local
. Rispetteranno quando passerai a motoer-head.dev.local
.
- Un carattere jolly in un certificato corrisponderà a UNA sola etichetta (= sezione tra due punti) in un dominio, mai di più.
*.dev.local
corrisponde myname.dev.local
ma NON other.myname.dev.local
!
- I caratteri jolly multilivello (
*.*.dev.local
) NON sono possibili nei certificati. Quindi other.myname.dev.local
può essere coperto solo da un carattere jolly del modulo *.myname.dev.local
. Di conseguenza, è meglio non utilizzare una parte del dominio di quarto livello. Metti tutte le tue variazioni nella parte di terzo livello. In questo modo otterrai un unico certificato per tutti i tuoi siti di sviluppo.
Il problema con Edge
Non si tratta in realtà di certificati autofirmati, ma è comunque correlato all'intero processo:
dopo aver seguito i passaggi precedenti, Edge potrebbe non mostrare alcun contenuto quando si apre myname.dev.local
.
Il motivo è una caratteristica caratteristica della gestione della rete di Windows 10 per App moderne, chiamata "Isolamento di rete".
Per risolvere il problema, aprire un prompt dei comandi con privilegi di amministratore e immettere una volta il seguente comando:
CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe
Ulteriori informazioni su Edge e isolamento di rete sono disponibili qui:
https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/
makecert.exe
essere nel mio percorso. Per i certificati ho pensato che sarei stato più sicuro e da utilizzare-a SHA512 -len 8192
: è stata necessaria un'eternità per la generazione. E come sospettavo che potesse, non ha avuto alcun impatto sul livello di crittografia utilizzato da IIS. Per impostazione predefinita, IIS utilizza 128 bit, devi fare cose sui criteri di gruppo per cambiarlo. Di ulteriore nota per gli altri lettori: non modificare i numeri magici dopo-eku
, sono obbligatori.