Usare SSL per le app ASP.NET Core in contenitori
SSL (Secure Sockets Layer) fornisce connessioni sicure tramite HTTP (HTTPS). Questo metodo di protezione delle connessioni usa un certificato e, in un'app in contenitori, i mapping delle porte sono diversi per i punti di ingresso protetti e non protetti.
Le architetture delle app multicontainer variano a seconda dei requisiti di sicurezza. Alcune progettazioni di app usano HTTPS per endpoint esterni, ma HTTP per la comunicazione interna da un contenitore a un altro. Gli ambienti a sicurezza elevata possono usare HTTPS per tutte le comunicazioni, anche tra contenitori accessibili solo all'interno di un perimetro esterno sicuro.
Porte e mapping delle porte
Il Dockerfile contiene direttive per esporre le porte al traffico esterno tramite HTTP non protetto o HTTPS sicuro. Inoltre, .NET 8 e versioni successive eseguono l'app in contenitori come utente tipico, ma nelle versioni precedenti di .NET le app in contenitori vengono eseguite come amministratore. Quando si esegue come amministratore, le app hanno accesso alle porte con privilegi 80 per il traffico HTTP e il traffico HTTPS 443. Quando le app vengono eseguite come utenti senza privilegi elevati, usano le porte 8080 per HTTP e 8081 per HTTPS. Le porte vengono visualizzate nei comandi EXPOSE nel Dockerfile generato da Visual Studio. Le porte nel contenitore specificato nel Dockerfile vengono mappate alle porte host usando i mapping specificati nel file delle impostazioni di avvio. Consultare Impostazioni di avvio degli strumenti contenitore. Quando il contenitore è in esecuzione, è possibile visualizzare i mapping delle porte nella finestra contenitori. Vedere Visualizzare e diagnosticare i contenitori.
Certificati
Gli strumenti contenitore in Visual Studio supportano il debug di un'app principale ASP.NET abilitata per SSL con un certificato di sviluppo, allo stesso modo in cui si prevede che funzioni senza contenitori. A tale scopo, Visual Studio aggiunge un paio di passaggi aggiuntivi per esportare il certificato e renderlo disponibile per il contenitore. Di seguito è riportato il flusso gestito da Visual Studio durante il debug nel contenitore:
Assicura che il certificato di sviluppo locale sia presente e attendibile nel computer host tramite lo strumento
dev-certs
.Esporta il certificato in
%APPDATA%\ASP.NET\Https
con una password sicura archiviata nell'archivio dei segreti utente per questa particolare app.Crea dei montaggi di volume per le directory seguenti:
*%APPDATA%\Microsoft\UserSecrets
*%APPDATA%\ASP.NET\Https
ASP.NET Core cerca un certificato corrispondente al nome dell'assembly nella cartella Https, motivo per cui viene eseguito il mapping al contenitore in tale percorso. Il percorso e la password del certificato possono essere definiti in alternativa usando le variabili di ambiente ( ad esempio, ASPNETCORE_Kestrel__Certificates__Default__Path
e ASPNETCORE_Kestrel__Certificates__Default__Password
) o nel file JSON dei segreti utente, ad esempio:
{
"Kestrel": {
"Certificates": {
"Default": {
"Path": "c:\\app\\mycert.pfx",
"Password": "strongpassword"
}
}
}
}
Se la configurazione supporta compilazioni in contenitori e non in contenitori, è consigliabile usare le variabili di ambiente, perché i percorsi sono specifici dell'ambiente contenitore.
Per ulteriori informazioni sull'utilizzo di SSL con app ASP.NET Core nei container, vedere Hosting di immagini ASP.NET Core con Docker tramite HTTPS.
Per un esempio di codice che illustra la creazione di certificati personalizzati per un'app multiservizio considerata attendibile nell'host e nei contenitori per la comunicazione da servizio a servizio HTTPS, vedere CertExample.
Se si prevede di distribuire l'app in contenitori in Azure, vedere Configurare HTTPS durante la distribuzione di applicazioni in contenitori in Azure.