HTTPS kényszerítése a ASP.NET Core-ban

David Galvan és Rick Anderson

A https/TLS használatára vonatkozó bejövő kérések ASP.NET Core-alkalmazásokhoz való kényszerítéséhez a következőt teheti:

  • Minden kéréshez HTTPS-t kell igényelni.
  • Az összes HTTP-kérés átirányítása HTTPS-be.

Egyetlen API sem akadályozhatja meg, hogy az ügyfél bizalmas adatokat küldjön az első kérelemre.

Ez a cikk azt ismerteti, hogyan konfigurálhatja a ASP.NET Core-alkalmazásokat, hogy HTTPS/TLS-t igényeljenek, vagy hogyan irányíthatók át HTTP-kérelmek a HTTPS/TLS-hez a biztonságos interakció érdekében. A különböző platformok hibaelhárítási lépései a nem megbízható tanúsítványokkal kapcsolatos problémák megoldásához szükségesek.

API-projektek

A webes API-kat használó projekteknek a következőkre kell törekednie:

  • Nem figyel a HTTP-n.
  • Zárja be a kapcsolatot a 400-ás állapotkóddal (hibás kérés), és ne szolgálja ki a kérést.

Ha le szeretné tiltani a HTTP-átirányítást egy API-ban, állítsa be a ASPNETCORE_URLS környezeti változót, vagy használja a parancssori --urls jelzőt. További információ: ASP.NET Core futtatókörnyezetek és 8 módszer az ASP.NET Core-alkalmazások URL-címeinek beállítására Andrew Lock által.

Warning

Ne használjon RequireHttpsAttribute olyan webes API-kat, amelyek bizalmas információkat kapnak. RequireHttpsAttribute HTTP-állapotkódokkal irányítja át a böngészőket a HTTP-ről a HTTPS-be. Előfordulhat, hogy az API-ügyfelek nem értik vagy nem tartják be a HTTP-ről HTTPS-re történő átirányításokat, és http-en keresztül is küldhetnek információkat.

HSTS- és API-projektek

A HTTP Strict Transport Security (HSTS) protokoll biztonságos megközelítése, hogy az API-projekteket úgy konfigurálja, hogy csak a HTTPS-n keresztül hallgassanak és válaszoljanak.

Warning

Az alapértelmezett API-projektek nem tartalmazzák a HSTS-t , mert általában csak böngészőbeli utasítások. Más hívók, például telefonos vagy asztali alkalmazások , nem tartják be az utasításokat. Még a böngészőkben is fennáll a veszélye annak, hogy egy API http-n keresztüli hitelesített hívása nem biztonságos hálózatokat veszélyeztet.

HTTP-átirányítás HTTPS-hez (ERR_INVALID_REDIRECT CORS-elővizsgálati kérelem esetén)

Ha egy HTTP-t használó végpontra irányuló kérést a UseHttpsRedirection metódussal HTTPS-re irányítanak át, az átirányítás a CORS elővizsgálati kérés során a(z) ERR_INVALID_REDIRECT hibával meghiúsul.

Az API-projektek elutasíthatják a HTTP-kéréseket ahelyett, hogy a metódust használva átirányítanák a UseHttpsRedirection kéréseket a HTTPS-be.

HTTPS megkövetelése

Éles ASP.NET Core webalkalmazások esetén a következő megközelítés ajánlott:

  • A HTTP-kérések HTTPS-hez való átirányításához használja a HTTPS átirányítási köztes szoftverét (UseHttpsRedirection).

  • Ha HSTS-fejléceket szeretne küldeni az ügyfeleknek, használja a HSTS köztes szoftvereket a UseHsts metóduson keresztül.

Note

A fordított proxykonfigurációban üzembe helyezett alkalmazások lehetővé teszik a proxy számára a kapcsolatbiztonság (HTTPS) kezelését. Ha a proxy a HTTPS-átirányítást is kezeli, nincs szükség HTTPS-átirányítási köztes szoftver használatára. Ha a proxykiszolgáló HSTS-fejlécek írását is kezeli (például natív HSTS-támogatás az Internet Information Services (IIS) 10.0 1709-es vagy újabb verziójában), akkor az alkalmazásnak nincs szüksége HSTS köztes szoftverre. További információ: HTTPS/HSTS letiltása a projektlétrehozáskor.

HTTPS átirányítási köztes szoftver (UseHttpsRedirection)

A következő kód meghívja a UseHttpsRedirection a Program.cs fájlban:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Az előző kiemelt kód:

Az ajánlott módszer az ideiglenes átirányítások használata állandó átirányítások helyett. A linkek gyorsítótárazása instabil viselkedést okozhat a fejlesztési környezetekben. Ha inkább állandó átirányítási állapotkódot szeretne küldeni, amikor az alkalmazás nem Development környezetben van, tekintse meg az állandó átirányítások konfigurálása a gyártásban című szakaszt. A HSTS használatával jelezheti az ügyfeleknek, hogy csak biztonságos erőforrás-kérelmeket kell elküldeni az alkalmazásnak (csak éles környezetben).

Note

Ne keverje össze a konfigurációs kulcsot és a HTTPS_PORT környezeti változót, amely a HTTPS átirányítási köztes szoftver portját állítja be a konfigurációs kulccsal és ASPNETCORE_HTTPS_PORTS a HTTPS_PORTS környezeti változóval, amely beállítja a portokat a /HTTP.sys végpontkonfigurációhozKestrel.ASPNETCORE_HTTPS_PORT

Portkonfiguráció

A köztes szoftvernek elérhetőnek kell lennie egy portnak ahhoz, hogy egy nem biztonságos kérést átirányítson a HTTPS-be. Ha nincs elérhető port:

  • A HTTPS-hez való átirányítás nem történik meg.
  • A köztes szoftver naplózza a figyelmeztetést, amely nem tudta meghatározni a https-portot az átirányításhoz.

Adja meg a HTTPS-portot az alábbi módszerek bármelyikével:

  • Állítsa be a HttpsRedirectionOptions.HttpsPort értékét.

  • Állítsa be a https_portgazdagép beállításait:

    • Gazdagépkonfigurációban.

    • A ASPNETCORE_HTTPS_PORT környezeti változó beállításával.

    • Ha hozzáad egy legfelső szintű bejegyzést a appsettings.json fájlhoz:

      {
        "https_port": 443,
        "Logging": {
          "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
          }
        },
        "AllowedHosts": "*"
      }
      
  • Jelöljön meg egy portot a biztonságos sémával a ASPNETCORE_URLS környezeti változó használatával. A környezeti változó konfigurálja a kiszolgálót. A köztes szoftver közvetetten felderíti a HTTPS-portot a IServerAddressesFeature. Ez a megközelítés nem működik fordított proxytelepítésekben.

  • A ASP.NET Core websablonok https URL-címet állít be a Properties/launchsettings.json fájlban Kestrel és az IIS Express esetében is. A launchsettings.json fájl csak a helyi gépen használható.

  • HTTPS URL-végpontot kell konfigurálni a Kestrel kiszolgáló vagy a HTTP.sys kiszolgáló nyilvános elérhetőségű peremhálózati üzembe helyezéséhez. Az alkalmazás csak egy HTTPS-portot használ. A köztes szoftver a portot észleli a következőn keresztül: IServerAddressesFeature.

Note

Ha egy alkalmazás fordított proxykonfigurációban fut, IServerAddressesFeature nem érhető el. Állítsa be a portot az ebben a szakaszban ismertetett egyéb megközelítések egyikével.

Peremtelepítések

Amikor Kestrel vagy HTTP.sys nyilvános elérésű edge szerverként van használva, akkor Kestrel vagy HTTP.sys úgy kell konfigurálni, hogy mindkettőt figyelje.

  • A biztonságos port, amelyre az ügyfél át van irányítva (általában a 443-as port az éles környezetben, és az 5001-es a fejlesztési környezetben).
  • A nem biztonságos port (általában 80 éles környezetben és 5000 fejlesztési környezetben).

A nem biztonságos portot az ügyfélnek el kell érnie ahhoz, hogy az alkalmazás nem biztonságos kérést kapjon, és átirányítsa az ügyfelet a biztonságos portra.

További információ: Kestrel végpontkonfiguráció vagy HTTP.sys webkiszolgáló implementálása a ASP.NET Core-ban.

Üzembe helyezési forgatókönyvek

Az ügyfél és a kiszolgáló közötti tűzfalnak nyitva kell lennie a forgalom számára nyitva lévő kommunikációs portokkal is.

Ha a kérések továbbítása fordított proxykonfigurációban történik, használja a továbbított fejlécek köztes szoftverét , mielőtt meghívja a HTTPS-átirányítási köztes szoftvereket. A továbbított fejlécek köztes szoftvere a Request.Scheme elemet a X-Forwarded-Proto fejléc használatával frissíti. A köztes szoftver lehetővé teszi az átirányítási URI-k és más biztonsági szabályzatok megfelelő működését. Ha a továbbított fejlécek middleware-e nincs használatban, előfordulhat, hogy a háttéralkalmazás nem kapja meg a megfelelő sémát, és átirányítási ciklusba kerülhet. Gyakori végfelhasználói hibaüzenet, hogy túl sok átirányítás van.

Az Azure App Service-be történő üzembe helyezéskor kövesse az Egyéni tartomány HTTPS-protokolljának engedélyezése az Azure App Service-ben című útmutatást.

Beállítások

A következő kiemelt kód meghívja a metódust a AddHttpsRedirection köztes szoftver beállításainak konfigurálásához:

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddHsts(options =>
{
    options.Preload = true;
    options.IncludeSubDomains = true;
    options.MaxAge = TimeSpan.FromDays(60);
    options.ExcludedHosts.Add("example.com");
    options.ExcludedHosts.Add("www.example.com");
});

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = Status307TemporaryRedirect;
    options.HttpsPort = 5001;
});

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

A hívás AddHttpsRedirection csak az értékek HttpsPortRedirectStatusCodemódosításához szükséges.

Az előző kiemelt kód:

Állandó átirányítások konfigurálása éles környezetben

A köztes szoftver alapértelmezés szerint minden átirányítással Status307TemporaryRedirect kódot küld. Ha az állandó átirányítási állapotkódot szeretné küldeni, amikor az alkalmazás nem környezetiDevelopment állapotban van, csomagolja be a köztes szoftver beállításainak konfigurációját egy feltételes ellenőrzésbe, amely nem környezetiDevelopment állapotot tartalmaz.

Az alábbi kód a szolgáltatások konfigurálását mutatja be a Program.cs fájlban:

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

if (!builder.Environment.IsDevelopment())
{
    builder.Services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = Status308PermanentRedirect;
        options.HttpsPort = 443;
    });
}

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");

    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

HTTPS-átirányítási köztes szoftver alternatív megközelítése

A HTTPS átirányítási köztes szoftver (a UseHttpsRedirection metódussal) használatának alternatíva az URL-újraírás köztes szoftver használata (a AddRedirectToHttps metóduson keresztül). AddRedirectToHttps az átirányítás végrehajtásakor az állapotkódot és a portot is beállíthatja. További információkért lásd: URL-átíró köztes szoftver.

Ha az alkalmazás más átirányítási szabályok megkövetelése nélkül átirányítja a HTTPS-hez, a javaslat a HTTPS átirányítási köztes szoftver (UseHttpsRedirection) használata a jelen cikkben leírtak szerint.

HTTP Strict Transport Security (HSTS) protokoll

OWASP-enként a HSTS egy, a webalkalmazás által a válaszfejlécen keresztül megadott bejelentkezési biztonsági fejlesztés. Ha a HSTS-t támogató böngésző a következő fejlécet kapja:

  • A böngésző tárolja a tartomány konfigurációját, amely megakadályozza a HTTP-en keresztüli kommunikáció küldését. A böngésző minden kommunikációt HTTPS-en keresztül kényszerít.
  • A böngésző megakadályozza, hogy a felhasználó nem megbízható vagy érvénytelen tanúsítványokat használ. A böngésző letiltja azokat a kéréseket, amelyek lehetővé teszik a felhasználó számára, hogy ideiglenesen megbízzanak egy ilyen tanúsítványban.

Mivel az ügyfél kényszeríti a HSTS-t, van néhány korlátozás:

  • Az ügyfélnek támogatnia kell a HSTS-t.
  • A HSTS legalább egy sikeres HTTPS-kérést igényel a HSTS-szabályzat létrehozásához.
  • Az alkalmazásnak minden HTTP-kérést ellenőriznie kell, és át kell irányítania vagy el kell utasítania a HTTP-kérést.

ASP.NET Core a HSTS-t bővítménymetódussal UseHsts implementálja. Az alábbi kódhívások UseHsts , ha az alkalmazás nincs fejlesztési módban:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

UseHsts nem ajánlott a fejlesztés során, mert a HSTS-beállításokat a böngészők könnyen gyorsítótárazhatják. Alapértelmezés szerint UseHsts kizárja a helyi visszacsatolási címet.

Azokban az éles környezetekben, amelyekben első alkalommal vezetik be a HTTPS-t, állítsa a kezdeti HstsOptions.MaxAge tulajdonság értékét alacsony értékre az egyik TimeSpan metódus használatával. Állítsa az értéket legfeljebb egy napra (órákban megadva), arra az esetre, ha vissza kell térnie a HTTPS-infrastruktúráról HTTP-re. Miután biztos a HTTPS-konfiguráció fenntarthatóságában, növelje a HSTS max-age értékét (általában egy év).

A következő kiemelt kód:

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddHsts(options =>
{
    options.Preload = true;
    options.IncludeSubDomains = true;
    options.MaxAge = TimeSpan.FromDays(60);
    options.ExcludedHosts.Add("example.com");
    options.ExcludedHosts.Add("www.example.com");
});

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = Status307TemporaryRedirect;
    options.HttpsPort = 5001;
});

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();
  • Beállítja a Strict-Transport-Security fejléc előbetöltési paraméterét. Az előzetes betöltés nem része az RFC 6797 HSTS-specifikációnak. A webböngészők támogatják a HSTS-webhelyek előzetes telepítését friss telepítéskor. További információért lásd https://hstspreload.org/.
  • Engedélyezi az includeSubDomain irányelvet, amely a HSTS-szabályzatot alkalmazza az altartományok üzemeltetésére. További információ: RFC 6797 HSTS-specifikáció (6.1.2. szakasz).
  • Az max-age fejléc Strict-Transport-Security paraméterét explicit módon 60 napra állítja be. Ha nincs beállítva, az alapértelmezés szerint 30 nap. További információkért lásd az max-agedirektívát az RFC 6797 HSTS specifikációban (6.1.1. szakasz).
  • A example.com elemet hozzáadja a kizárandó gazdagépek listájához.

UseHsts kizárja a következő visszacsatolási gazdagépeket:

  • localhost: Az IPv4 visszacsatolási címe.
  • 127.0.0.1: Az IPv4 visszacsatolási címe.
  • [::1]: Az IPv6 visszacsatolási címe.

A HTTPS/HSTS letiltása a projekt létrehozásakor

Bizonyos háttérszolgáltatás-forgatókönyvekben, ahol a kapcsolatbiztonság a hálózat nyilvános elérésű peremhálózatán van kezelve, nem szükséges minden csomóponton konfigurálni a kapcsolatbiztonságot. A Visual Studio sablonjaiból vagy a dotnet új parancsából létrehozott webalkalmazások engedélyezik a HTTPS-átirányítást és a HSTS-t. Az olyan üzemelő példányok esetében, amelyek nem igénylik ezeket a forgatókönyveket, kikapcsolhatja a HTTPS/HSTS szolgáltatást, amikor az alkalmazás a sablonból jön létre.

A HTTPS/HSTS letiltása:

Amikor új ASP.NET Core webalkalmazást hoz létre, törölje a Konfiguráció https beállítás kijelölését:

Képernyőkép, amely a Visual Studióban az „Új ASP.NET Core-webalkalmazás létrehozása” párbeszédpanelt mutatja, ahol a „HTTPS konfigurálása” jelölőnégyzet nincs bejelölve.

Megbízható ASP.NET Core HTTPS fejlesztői tanúsítvány

A .NET SDK https fejlesztési tanúsítványt tartalmaz. A tanúsítvány az első futtatás során települ. A parancs például a dotnet --info következő kimenet egy változatát állítja elő:

ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.

A .NET SDK telepítése telepíti a ASP.NET Core HTTPS fejlesztési tanúsítványt a helyi felhasználói tanúsítványtárolóba. A tanúsítvány telepítve van, de nem megbízható. A tanúsítvány megbízhatóságához hajtsa végre az eszköz futtatásához dotnet dev-certs szükséges egyszeri lépést:

dotnet dev-certs https --trust

Az alábbi parancs segítséget nyújt az dotnet dev-certs eszközről:

dotnet dev-certs https --help

Warning

Ne hozzon létre fejlesztési tanúsítványt újraterjesztésre tervezett környezetben, például tárolólemezképben vagy virtuális gépen. Ez a forgatókönyv hamisításhoz és jogosultságszint-emeléséhez vezethet. A helyzet megelőzése érdekében állítsa a DOTNET_GENERATE_ASPNET_CERTIFICATE környezeti változót false értékre, mielőtt első alkalommal meghívná a .NET parancssori felületet. Ez a megközelítés kihagyja a ASP.NET Core fejlesztési tanúsítvány automatikus létrehozását a parancssori felület első futtatása során.

Fejlesztői tanúsítvány beállítása a Dockerhez

A Docker fejlesztői tanúsítványának konfigurálásához lásd: GitHub dotnet/aspnetcore.docs 6199 - A fejlesztői tanúsítvány beállítása a Docker fejlesztésben való használatakor.

Linux-specifikus szempontok

A Linux-disztribúciók jelentősen eltérnek a tanúsítványok megbízhatóként való megjelölésétől.

Az dotnet dev-certs eszköz várhatóan széles körben alkalmazható lesz, de hivatalos támogatás csak az Ubuntu és a Fedora esetében érhető el. A támogatás kifejezetten a Firefox és a Chromium-alapú böngészők (Microsoft Edge, Chrome és Chromium) megbízhatóságának biztosítására irányul.

Dependencies

  • Az OpenSSL hitelességének biztosításához az eszköznek az openssl elérési útvonalon kell lennie.
  • A böngésző megbízhatóságának létrehozásához (például a Microsoft Edge vagy a Firefoxban) a certutil eszköznek az elérési úton kell lennie.

OpenSSL-megbízhatóság

Ha egy ASP.NET Core fejlesztési tanúsítvány megbízható, a rendszer exportálja a tanúsítványt az aktuális felhasználó kezdőlapjának egyik mappájába. Ahhoz, hogy az OpenSSL (és az azt használó ügyfelek) felvegyék ezt a mappát, be kell állítania a környezeti változót SSL_CERT_DIR . A változót beállíthatja egy adott munkamenetre egy, a export SSL_CERT_DIR=$HOME/.aspnet/dev-certs/trust:/usr/lib/ssl/certs-hoz hasonló parancs futtatásával (a pontos érték a kimenetben található, amikor átadja a --verbose paramétert), vagy hozzáadhatja a(z) (disztribúció- és rendszerhéjfüggő) konfigurációs fájlhoz (például a .profile fájlhoz).

Ez a megközelítés szükséges ahhoz, hogy az olyan eszközök, mint a curl, megbízzanak a fejlesztői tanúsítványban. Alternatívaként átadhatja a -CAfile vagy -CApath értéket minden egyes curl hívásnak.

Note

Az 1.1.1h vagy újabb, illetve a 3.0.0-s vagy újabb verzió szükséges, attól függően, hogy melyik főverziót használja.

Ha az OpenSSL-megbízhatóság rossz állapotba kerül (például ha dotnet dev-certs https --clean nem sikerül eltávolítani), a c_rehash eszközzel gyakran megoldhatja a helyzetet.

Overrides

Ha egy másik böngészőt használ a saját Hálózati biztonsági szolgáltatások (NSS) tárolójával, a DOTNET_DEV_CERTS_NSSDB_PATHS környezeti változóval megadhatja az NSS-könyvtárak kettősponttal tagolt listáját (például a könyvtárat, amely cert9.dbtartalmazza). Ezután hozzáadhatja a fejlesztési tanúsítvány helyét a változó listájához.

Ha azOkat a tanúsítványokat tárolja, amelyekben az OpenSSL megbízhatónak szeretne lennie egy adott könyvtárban, a DOTNET_DEV_CERTS_OPENSSL_CERTIFICATE_DIRECTORY környezeti változóval jelezheti a tanúsítvány helyét.

Warning

Ha bármelyik változót beállítja, minden alkalommal, amikor a megbízhatóság frissül, minden alkalommal ugyanazokat az értékeket kell megadnia. Ha az értékek megváltoznak, az eszköz nem tud a korábbi helyeken található tanúsítványokról (például a tanúsítványkarbantartás során).

A sudo használata

A többi platformhoz hasonlóan a fejlesztési tanúsítványok tárolása és megbízhatósága minden felhasználó számára külön történik.

Ha a dotnet dev-certs elemet másik felhasználóként futtatja (például a sudo használatával), akkor konkrétan az a felhasználó (például root) bízik meg a fejlesztési tanúsítványban.

HTTPS-tanúsítvány hitelesítése Linuxon a linux-dev-certs használatával

A linux-dev-certs egy nyílt forráskódú, közösség által támogatott , .NET-alapú globális eszköz, amely kényelmes módot kínál a linuxos fejlesztői tanúsítványok létrehozására és megbízhatóságára. Microsoft nem tartja karban és nem támogatja az eszközt.

Az alábbi parancsok telepítik az eszközt, és létrehoznak egy megbízható fejlesztői tanúsítványt:

dotnet tool update -g linux-dev-certs
dotnet linux-dev-certs install

További információkért vagy a problémák jelentéséhez tekintse meg a Linux-dev-certs GitHub-adattárat.

SUSE Linux Enterprise Server (SLES Linux)

Ha a konfiguráció tartalmazza a SUSE Linux Enterprise Servert, lásd: GitHub dotnet/aspnetcore.docs issue #28292 - HTTPS-tanúsítvány megbízhatóvá tétele SLES rendszeren.

Tanúsítványproblémák elhárítása (a tanúsítvány nem megbízható)

Előfordul, hogy egy ASP.NET Core HTTPS-fejlesztési tanúsítvány telepítve van, és megbízhatónak van jelölve, a böngésző mégis arra figyelmeztet, hogy a tanúsítvány nem megbízható. A következő szakaszok segítséget nyújtanak a probléma elhárításához.

A ASP.NET Core HTTPS fejlesztési tanúsítványt használja a Kestrelrendszer.

Az IIS Express-tanúsítvány javításához lásd: Stack Overflow-probléma #20036984/ válasz #20048613 - Hogyan állíthatom vissza a hiányzó IIS Express SSL-tanúsítványt?

Minden platform – a tanúsítvány nem megbízható

Minden platform esetében próbálja meg megoldani a nem megbízható tanúsítványokkal kapcsolatos problémákat az alábbi lépésekkel:

  1. Futtassa az alábbi parancsot:

    dotnet dev-certs https --clean
    dotnet dev-certs https --trust
    
  2. Zárja be a megnyitott böngészőpéldányokat, és nyissa meg az alkalmazást egy új böngészőablakban.

    A böngésző gyorsítótára tárolja, hogy egy tanúsítvány megbízható-e. A bezárási/megnyitási folyamat segít frissíteni a tanúsítványok böngészőgyorsítótár-beállításait.

A dotnet dev-certs https parancsok általában megoldják a böngésző megbízhatósági problémáinak többségét. Ha a dotnet dev-certs https --clean parancs sikertelen, és a böngésző továbbra sem bízik meg a tanúsítványban, próbálkozzon a platformspecifikus javaslatokkal a következő szakaszokban.

Docker – a tanúsítvány nem megbízható

Ha Dockert használ, próbálja meg megoldani a problémát az alábbi lépésekkel:

  1. Törölje a C:\Users{USER}\AppData\Roaming\ASP.NET\Https mappát.

  2. Tisztítsa meg az oldatot. Törölje a tároló, a és a obj, valamint a mappákat.

  3. Indítsa újra a fejlesztőeszközt. Például a Visual Studio vagy a Visual Studio Code.

Windows – a tanúsítvány nem megbízható

Ha Windowsban dolgozik, hajtsa végre az alábbi hibaelhárítási lépéseket:

  1. Ellenőrizze a tanúsítványtárolóban található tanúsítványokat. Keressen egy localhost tanúsítványt a ASP.NET Core HTTPS development certificate felhasználóbarát névvel két mappában:

    • Aktuális felhasználói > személyes > tanúsítványok
    • A felhasználó > megbízható legfelső szintű hitelesítésszolgáltatóinak > aktuális tanúsítványai
  2. Távolítsa el az összes tanúsítványt mind a személyes, mind a megbízható legfelső szintű hitelesítésszolgáltatóktól.

    Important

    Ne távolítsa el az IIS Express localhost tanúsítványt.

  3. Futtassa az alábbi parancsot:

    dotnet dev-certs https --clean
    dotnet dev-certs https --trust
    
  4. Zárja be a megnyitott böngészőpéldányokat, és nyissa meg az alkalmazást egy új böngészőablakban.

OS X – a tanúsítvány nem megbízható

Ha az OS X-et használja, próbálja meg megoldani a problémát az alábbi lépésekkel:

  1. Nyissa meg a KeyChain Accesst, majd válassza ki a rendszerkulcsláncot.

  2. Ellenőrizze, hogy van-e localhost-tanúsítvány.

  3. Győződjön meg arról, hogy a tanúsítvány az ikonon a plusz (+) szimbólumot jeleníti meg, amely azt jelzi, hogy a tanúsítvány minden felhasználó számára megbízható.

  4. Távolítsa el a tanúsítványt a rendszerkulcsláncból.

  5. Futtassa az alábbi parancsot:

    dotnet dev-certs https --clean
    dotnet dev-certs https --trust
    
  6. Zárja be a megnyitott böngészőpéldányokat, és nyissa meg az alkalmazást egy új böngészőablakban.

A Visual Studio tanúsítványproblémáinak elhárításáról további információt a GitHub dotnet/aspnetcore probléma #16892) - HTTPS-hiba az IIS Express használatával című témakörben talál.

Linux – a tanúsítvány nem megbízható

Ha Linuxot futtat, kövesse az alábbi lépéseket a nem megbízható tanúsítvány hibaelhárításához:

  1. Győződjön meg arról, hogy a vizsgált tanúsítvány a kiszolgáló által Kestrel használni tervezett felhasználói HTTPS fejlesztői tanúsítvány.

  2. Ellenőrizze az aktuális felhasználó alapértelmezett HTTPS fejlesztői Kestrel tanúsítványát a következő helyen:

    ls -la ~/.dotnet/corefx/cryptography/x509stores/my
    

    A HTTPS fejlesztői Kestrel tanúsítványfájl az SHA1 lenyomatát tartalmazza. Ha a fájlt a dotnet dev-certs https --clean paranccsal törlik, a rendszer szükség esetén egy másik ujjlenyomattal újragenerálja a fájlt.

  3. Ellenőrizze az exportált tanúsítvány ujjlenyomatát az alábbi parancs futtatásával:

    openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crt
    

    Ha a tanúsítvány ujjlenyomata nem egyezik, vizsgálja meg a következő feltételeket:

    • Ellenőrizze, hogy a tanúsítvány régi-e.

    • Ellenőrizze, hogy a tanúsítvány a főfelhasználó exportált fejlesztői tanúsítványa-e.

      • Ha igen, exportálja a tanúsítványt.
  4. Ellenőrizze a legfelső szintű felhasználói tanúsítványt a következő mappában:

    ls -la /root/.dotnet/corefx/cryptography/x509stores/my
    

A Visual Studióval használt IIS Express SSL-tanúsítvány

Az IIS Express-tanúsítvánnyal kapcsolatos problémák megoldásához válassza a Repair lehetőséget a Visual Studio telepítőjében. További információ: GitHub dotnet/aspnetcore probléma #16892) - HTTPS-hiba az IIS Express használatával.

A csoportházirend megakadályozza az önaláírt tanúsítványok megbízhatóságát

Bizonyos esetekben a csoportházirend megakadályozhatja az önaláírt tanúsítványok megbízhatóságát. További információ: GitHub dotnet/aspnetcore probléma #21173 - Hiba a HTTPS fejlesztői tanúsítvány megbízhatóságával.

Note

Ha .NET 9 vagy újabb SDK-t használ, tekintse meg a cikk .NET 9-es verziójában található frissített Linux-eljárásokat.

Warning

API-projektek

Ne használjon RequireHttpsAttribute olyan webes API-kat, amelyek bizalmas információkat kapnak. RequireHttpsAttribute HTTP-állapotkódokkal irányítja át a böngészőket a HTTP-ről a HTTPS-be. Előfordulhat, hogy az API-ügyfelek nem értik vagy nem tartják be a HTTP-ről HTTPS-re történő átirányításokat. Az ilyen ügyfelek HTTP-en keresztül küldhetnek információkat. A webes API-knak a következőkre van szükség:

  • Nem figyel a HTTP-n.
  • Zárja be a kapcsolatot a 400-ás állapotkóddal (hibás kérés), és ne szolgálja ki a kérést.

Ha le szeretné tiltani a HTTP-átirányítást egy API-ban, állítsa be a ASPNETCORE_URLS környezeti változót, vagy használja a parancssori --urls jelzőt. További információ: ASP.NET Core futtatókörnyezetek és 8 módszer az ASP.NET Core-alkalmazások URL-címeinek beállítására Andrew Lock által.

HSTS- és API-projektek

Az alapértelmezett API-projektek nem tartalmazzák a HSTS-t , mivel a HSTS általában csak böngészőutasítás . Más hívók, például telefonos vagy asztali alkalmazások , nem tartják be az utasításokat. Még a böngészőkben is fennáll a veszélye annak, hogy egy API http-n keresztüli hitelesített hívása nem biztonságos hálózatokat veszélyeztet. A biztonságos megközelítés az API-projektek konfigurálása, hogy csak a HTTPS-en keresztül hallgassanak és válaszoljanak.

A HTTP-ről HTTPS-re történő átirányítás ERR_INVALID_REDIRECT hibát okoz a CORS-elővizsgálati kérelemben.

A HTTP-t használó végpontra irányuló kérelmek, amelyeket a UseHttpsRedirection HTTPS-re átirányítanak, sikertelenek a CORS elővizsgálati kérelem során ERR_INVALID_REDIRECT.

Az API-projektek elutasíthatják a HTTP-kéréseket, ahelyett, hogy UseHttpsRedirection segítségével irányítanák át a kéréseket HTTPS-re.

HTTPS megkövetelése

Javasoljuk, hogy az éles ASP.NET Core-webalkalmazások a következőket használják:

  • HTTPS-átirányítási köztes szoftver (UseHttpsRedirection) a HTTP-kérések HTTPS-be való átirányításához.
  • A HSTS köztes szoftver (UseHsts) HTTP Strict Transport Security (HSTS) protokollfejléceket küld az ügyfeleknek.

Note

A fordított proxykonfigurációban üzembe helyezett alkalmazások lehetővé teszik a proxy számára a kapcsolatbiztonság (HTTPS) kezelését. Ha a proxy a HTTPS-átirányítást is kezeli, nincs szükség HTTPS-átirányítási köztes szoftver használatára. Ha a proxykiszolgáló HSTS-fejlécek írását is kezeli (például natív HSTS-támogatás az IIS 10.0 -ban (1709) vagy újabb verziókban), az alkalmazás nem igényli a HSTS köztes szoftver használatát. További információ: HTTPS/HSTS letiltása a projektlétrehozáskor.

HTTPS átirányítási köztes szoftver (UseHttpsRedirection)

A következő kódhívás a UseHttpsRedirection fájlban található: Program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Az előző kiemelt kód:

Javasoljuk, hogy ideiglenes átirányításokat használjunk állandó átirányítások helyett. A linkek gyorsítótárazása instabil viselkedést okozhat a fejlesztési környezetekben. Ha inkább állandó átirányítási állapotkódot szeretne küldeni, amikor az alkalmazás nem Development környezetben van, tekintse meg az állandó átirányítások konfigurálása a gyártásban című szakaszt. Javasoljuk, hogy HSTS használatával jelezhesse az ügyfeleknek, hogy csak biztonságos erőforrás-kérelmeket kell küldeni az alkalmazásnak (csak éles környezetben).

Portkonfiguráció

A köztes szoftvernek elérhetőnek kell lennie egy portnak ahhoz, hogy egy nem biztonságos kérést átirányítson a HTTPS-be. Ha nincs elérhető port:

  • A HTTPS-hez való átirányítás nem történik meg.
  • A köztes szoftver naplózza a következő figyelmeztetést: "Nem sikerült meghatározni a https-portot az átirányításhoz."

Adja meg a HTTPS-portot az alábbi módszerek bármelyikével:

  • Állítsa be a HttpsRedirectionOptions.HttpsPort értékét.

  • Állítsa be a https_portgazdagép beállításait:

    • Gazdagépkonfigurációban.

    • A ASPNETCORE_HTTPS_PORT környezeti változó beállításával.

    • Úgy, hogy hozzáadsz egy legfelső szintű bejegyzést itt: appsettings.json.

      {
        "https_port": 443,
        "Logging": {
          "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
          }
        },
        "AllowedHosts": "*"
      }
      
  • Jelöljön meg egy portot a biztonságos sémával a ASPNETCORE_URLS környezeti változó használatával. A környezeti változó konfigurálja a kiszolgálót. A köztes szoftver közvetetten felderíti a HTTPS-portot a IServerAddressesFeature. Ez a megközelítés nem működik fordított proxytelepítésekben.

  • Az ASP.NET Core-websablonok HTTPS-URL címet állítanak be a Properties/launchsettings.json mind a Kestrel mind az IIS Express számára. launchsettings.json csak a helyi gépen használható.

  • HTTPS URL-végpontot kell konfigurálni a Kestrel kiszolgáló vagy a HTTP.sys kiszolgáló nyilvános elérhetőségű peremhálózati üzembe helyezéséhez. Az alkalmazás csak egy HTTPS-portot használ. A köztes szoftver a portot észleli a következőn keresztül: IServerAddressesFeature.

Note

Ha egy alkalmazás fordított proxykonfigurációban fut, IServerAddressesFeature nem érhető el. Állítsa be a portot az ebben a szakaszban ismertetett egyéb megközelítések egyikével.

Peremtelepítések

Amikor Kestrel vagy HTTP.sys nyilvános elérésű edge szerverként van használva, akkor Kestrel vagy HTTP.sys úgy kell konfigurálni, hogy mindkettőt figyelje.

  • A biztonságos port, amelyre az ügyfél át van irányítva (általában a 443-as port az éles környezetben, és az 5001-es a fejlesztési környezetben).
  • A nem biztonságos port (általában 80 éles környezetben és 5000 fejlesztési környezetben).

A nem biztonságos portot az ügyfélnek el kell érnie ahhoz, hogy az alkalmazás nem biztonságos kérést kapjon, és átirányíthassa az ügyfelet a biztonságos portra.

További információ: Kestrel végpontkonfiguráció vagy HTTP.sys webkiszolgáló implementálása a ASP.NET Core-ban.

Üzembe helyezési forgatókönyvek

Az ügyfél és a kiszolgáló közötti tűzfalnak nyitva kell lennie a forgalom számára nyitva lévő kommunikációs portokkal is.

Ha a kérések továbbítása fordított proxykonfigurációban történik, használja a továbbított fejlécek köztes szoftverét , mielőtt meghívja a HTTPS-átirányítási köztes szoftvereket. A továbbított fejlécek köztes rétege a Request.Scheme fejléc használatával frissíti a X-Forwarded-Proto fejlécet. A köztes szoftver lehetővé teszi az átirányítási URI-k és más biztonsági szabályzatok megfelelő működését. Ha a továbbított fejlécek köztes szoftverkomponenst nem használják, előfordulhat, hogy a háttéralkalmazás nem kapja meg a helyes sémát, emiatt pedig átirányítási hurokba kerül. Gyakori végfelhasználói hibaüzenet, hogy túl sok átirányítás történt.

Az Azure App Service-ben való üzembe helyezéskor kövesse az oktatóanyag útmutatását : Meglévő egyéni SSL-tanúsítvány kötése az Azure Web Appshez.

Beállítások

A köztes szoftver beállításainak konfigurálásához a következő kiemelt kódhívások AddHttpsRedirection :

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddHsts(options =>
{
    options.Preload = true;
    options.IncludeSubDomains = true;
    options.MaxAge = TimeSpan.FromDays(60);
    options.ExcludedHosts.Add("example.com");
    options.ExcludedHosts.Add("www.example.com");
});

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = Status307TemporaryRedirect;
    options.HttpsPort = 5001;
});

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

A hívás AddHttpsRedirection csak az értékek HttpsPortRedirectStatusCodemódosításához szükséges.

Az előző kiemelt kód:

Állandó átirányítások konfigurálása éles környezetben

A köztes szoftver alapértelmezésként egy Status307TemporaryRedirect küld az összes átirányításnál. Ha az állandó átirányítási állapotkódot szeretné küldeni, amikor az alkalmazás nem környezetiDevelopment állapotban van, csomagolja be a köztes szoftver beállításainak konfigurációját egy feltételes ellenőrzésbe, amely nem környezetiDevelopment állapotot tartalmaz.

Szolgáltatások konfigurálásakor a következő helyen Program.cs:

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

if (!builder.Environment.IsDevelopment())
{
    builder.Services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = Status308PermanentRedirect;
        options.HttpsPort = 443;
    });
}

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");

    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

HTTPS-átirányítási köztes szoftver alternatív megközelítése

A HTTPS-átirányításra szolgáló köztes réteg (UseHttpsRedirection) használatának egyik alternatívája az URL-újraírásra szolgáló köztes réteg (AddRedirectToHttps) használata. AddRedirectToHttps az átirányítás végrehajtásakor az állapotkódot és a portot is beállíthatja. További információkért lásd: URL-átíró köztes szoftver.

Ha a HTTPS-hez a további átirányítási szabályok megkövetelése nélkül irányít át, javasoljuk, hogy a jelen cikkben ismertetett HTTPS-átirányítási köztes szoftver (UseHttpsRedirection) használatát használja.

HTTP Strict Transport Security (HSTS) protokoll

Az OWASP szerint a HTTP Strict Transport Security (HSTS) egy válaszfejlécen keresztül megadott, opt-in biztonsági fejlesztés, amelyet a webalkalmazás kínál. Ha a HSTS-t támogató böngésző a következő fejlécet kapja:

  • A böngésző tárolja a tartomány konfigurációját, amely megakadályozza a HTTP-en keresztüli kommunikáció küldését. A böngésző minden kommunikációt HTTPS-en keresztül kényszerít.
  • A böngésző megakadályozza, hogy a felhasználó nem megbízható vagy érvénytelen tanúsítványokat használ. A böngésző letiltja azokat a kéréseket, amelyek lehetővé teszik a felhasználó számára, hogy ideiglenesen megbízzanak egy ilyen tanúsítványban.

Mivel a HSTS-t az ügyfél kényszeríti ki, bizonyos korlátozásokkal rendelkezik:

  • Az ügyfélnek támogatnia kell a HSTS-t.
  • A HSTS legalább egy sikeres HTTPS-kérést igényel a HSTS-szabályzat létrehozásához.
  • Az alkalmazásnak minden HTTP-kérést ellenőriznie kell, és át kell irányítania vagy el kell utasítania a HTTP-kérést.

ASP.NET Core a HSTS-t bővítménymetódussal UseHsts implementálja. Az alábbi kódhívások UseHsts , ha az alkalmazás nincs fejlesztési módban:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

UseHsts nem ajánlott a fejlesztés során, mert a HSTS-beállításokat a böngészők könnyen gyorsítótárazhatják. Alapértelmezés szerint UseHsts kizárja a helyi visszacsatolási címet.

A HTTPS-t első alkalommal implementáló éles környezetekben állítsa a kezdeti HstsOptions.MaxAge értéket egy kis értékre az TimeSpan egyik metódus használatával. Állítsa be az értéket úgy, hogy órák helyett legfeljebb egy nap legyen, arra az esetre, ha vissza kell állítania a HTTPS-infrastruktúrát HTTP-re. Miután biztos a HTTPS-konfiguráció fenntarthatóságában, növelje a HSTS-értéket max-age ; a gyakran használt érték egy év.

A következő kiemelt kód:

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddHsts(options =>
{
    options.Preload = true;
    options.IncludeSubDomains = true;
    options.MaxAge = TimeSpan.FromDays(60);
    options.ExcludedHosts.Add("example.com");
    options.ExcludedHosts.Add("www.example.com");
});

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = Status307TemporaryRedirect;
    options.HttpsPort = 5001;
});

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();
  • Beállítja a Strict-Transport-Security fejléc előbetöltési paraméterét. Az előzetes adatbetöltés nem része az RFC HSTS-specifikációnak, de a webböngészők támogatják a HSTS-webhelyek új telepítésre való előzetes betöltését. További információért lásd https://hstspreload.org/.
  • Engedélyezi az includeSubDomain beállítást, amely a HSTS-szabályzatot alkalmazza a Host altartományaira.
  • Az max-age fejléc Strict-Transport-Security paraméterét explicit módon 60 napra állítja be. Ha nincs beállítva, az alapértelmezett érték 30 nap. További információt a maximális életkorról szóló irányelvben talál.
  • A example.com elemet hozzáadja a kizárandó gazdagépek listájához.

UseHsts kizárja a következő visszacsatolási gazdagépeket:

  • localhost : Az IPv4 visszacsatolási címe.
  • 127.0.0.1 : Az IPv4 visszacsatolási címe.
  • [::1] : Az IPv6 visszacsatolási címe.

A HTTPS/HSTS letiltása projektlétrehozáskor

Bizonyos háttérszolgáltatás-forgatókönyvekben, ahol a kapcsolatbiztonság a hálózat nyilvános elérésű peremhálózatán van kezelve, nincs szükség a kapcsolatbiztonság konfigurálására az egyes csomópontokon. A Visual Studio sablonjaiból vagy a dotnet új parancsából létrehozott webalkalmazások engedélyezik a HTTPS-átirányítást és a HSTS-t. Az olyan üzemelő példányok esetében, amelyek nem igénylik ezeket a forgatókönyveket, kikapcsolhatja a HTTPS/HSTS szolgáltatást, ha az alkalmazás a sablonból jön létre.

A HTTPS/HSTS letiltása:

Törölje a jelölést a HTTPS konfigurálás jelölőnégyzetből.

Új ASP.NET Core webalkalmazás párbeszédpanel, amelyen a Https-konfigurálás jelölőnégyzet nincs bejelölve.

A ASP.NET Core HTTPS fejlesztési tanúsítvány megbízhatósága Windows és macOS rendszeren

A Firefox böngészőben lásd a következő szakaszt.

A .NET Core SDK tartalmaz egy HTTPS fejlesztési tanúsítványt. A tanúsítvány az első futtatás során települ. Például dotnet --info a következő kimenet egy változata jelenik meg:

ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.

A .NET Core SDK telepítése telepíti a ASP.NET Core HTTPS fejlesztési tanúsítványt a helyi felhasználói tanúsítványtárolóba. A tanúsítvány telepítve van, de nem megbízható. A tanúsítvány megbízhatóságához hajtsa végre az eszköz futtatásához dotnet dev-certs szükséges egyszeri lépést:

dotnet dev-certs https --trust

Az alábbi parancs segítséget nyújt az dotnet dev-certs eszközről:

dotnet dev-certs https --help

Warning

Ne hozzon létre fejlesztési tanúsítványt olyan környezetben, amely újraterjesztésre kerül, például tárolólemezképet vagy virtuális gépet. Ez hamisításhoz és jogosultságszint-emeléséhez vezethet. Ennek elkerülése érdekében állítsa a DOTNET_GENERATE_ASPNET_CERTIFICATE környezeti változót false a .NET CLI első meghívása előtt. Ez kihagyja a ASP.NET Core fejlesztési tanúsítvány automatikus létrehozását a parancssori felület első futtatása során.

Bízzon a HTTPS-tanúsítványban a Firefoxban a SEC_ERROR_INADEQUATE_KEY_USAGE hiba elkerülése érdekében

A Firefox böngésző saját tanúsítványtárolót használ, ezért nem bízik az IIS Express vagy Kestrel a fejlesztői tanúsítványokban.

A HTTPS-tanúsítványnak a Firefoxban való megbízhatóságára, szabályzatfájl létrehozására vagy a FireFox böngészővel való konfigurálására két módszer létezik. A böngészővel való konfigurálás létrehozza a szabályzatfájlt, így a két módszer egyenértékű.

Szabályzatfájl létrehozása HTTPS-tanúsítvány megbízhatóságához a Firefoxban

Hozzon létre egy szabályzatfájlt (policies.json) a következő helyen:

Adja hozzá a következő JSON-t a Firefox-házirendfájlhoz:

{
  "policies": {
    "Certificates": {
      "ImportEnterpriseRoots": true
    }
  }
}

Az előző szabályzatfájl a Windows tanúsítványtárolójában található megbízható tanúsítványokból származó Firefox megbízhatósági tanúsítványokat készít. A következő szakasz alternatív módszert kínál az előző szabályzatfájl létrehozásához a Firefox böngészővel.

HTTPS-tanúsítvány megbízhatóságának konfigurálása a Firefox böngészővel

Állítsa be security.enterprise_roots.enabled = true a következő utasítások felhasználásával.

  1. Adja meg about:config a Firefox böngészőben.
  2. Ha elfogadja a kockázatot, válassza a Kockázat elfogadása és a Folytatás lehetőséget.
  3. Válassza az Összes megjelenítése lehetőséget
  4. Beállít security.enterprise_roots.enabled = true
  5. Kilépés és újraindítás a Firefoxból

További információ: Hitelesítésszolgáltatók beállítása a Firefoxban és a mozilla/policy-templates/README fájl.

Fejlesztői tanúsítvány beállítása a Dockerhez

Lásd ezt a GitHub-hibajegyet.

HTTPS-tanúsítvány megbízhatósága Linuxon

A bizalom kiépítése terjesztési és böngészőspecifikus feladat. Az alábbi szakaszok útmutatást nyújtanak néhány népszerű disztribúcióhoz, valamint a Chromium böngészőkhöz (Edge és Chrome) és a Firefoxhoz.

Az Ubuntu megbízik a tanúsítványban a szolgáltatásközi kommunikációhoz

Az alábbi utasítások nem működnek egyes Ubuntu-verziókhoz, például a 20.04-hez. További információ: GitHub-probléma dotnet/AspNetCore.Docs #23686.

  1. Telepítse az OpenSSL 1.1.1h vagy újabb verzióját. Az OpenSSL frissítésére vonatkozó útmutatásért tekintse meg a disztribúciót.

  2. Futtassa az alábbi parancsot:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    sudo update-ca-certificates
    

Az előző parancsok:

  • Győződjön meg arról, hogy az aktuális felhasználó fejlesztői tanúsítványa létrejött.
  • Exportálja a mappához ca-certificates szükséges emelt szintű engedélyekkel rendelkező tanúsítványt az aktuális felhasználó környezetének használatával.
  • A -E jelző eltávolítása exportálja a fő felhasználói tanúsítványt, és szükség esetén létrehozza. Minden újonnan létrehozott tanúsítvány más ujjlenyomattal rendelkezik. Ha gyökérként fut, sudo és -E nincs rá szükség.

Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

HTTPS-tanúsítvány megbízhatósága Linuxon az Edge vagy a Chrome használatával

Linuxon futó chromium böngészők esetén:

  • Telepítse a libnss3-tools-t a disztribúciójához.

  • Hozza létre vagy ellenőrizze, hogy a $HOME/.pki/nssdb mappa létezik-e a gépen.

  • Exportálja a tanúsítványt a következő paranccsal:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

  • Futtassa az alábbi parancsot:

    certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crt
    
  • Lépjen ki, és indítsa újra a böngészőt.

A tanúsítvány megbízhatósága a Linuxon futó Firefoxban

  • Exportálja a tanúsítványt a következő paranccsal:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

  • Hozzon létre egy JSON-fájlt /usr/lib/firefox/distribution/policies.json a következő paranccsal:

cat <<EOF | sudo tee /usr/lib/firefox/distribution/policies.json
{
    "policies": {
        "Certificates": {
            "Install": [
                "/usr/local/share/ca-certificates/aspnet/https.crt"
            ]
        }
    }
}
EOF

Megjegyzés: Az Ubuntu 21.10 Firefox snap csomagként érkezik, és a telepítési mappa /snap/firefox/current/usr/lib/firefox.

A szabályzatfájl böngészővel történő konfigurálásának alternatív módjáról ebben a cikkben a HTTPS-tanúsítvány megbízhatóságának konfigurálása a Firefox böngészővel című témakörben olvashat.

A tanúsítvány megbízhatósága a Fedora 34 használatával

See:

Bízzon a tanúsítványban más disztribúciókkal

Lásd ezt a GitHub-hibajegyet.

HTTPS-tanúsítvány megbízhatósága Linux rendszerhez készült Windows-alrendszerből

Az alábbi utasítások nem működnek egyes Linux-disztribúciók esetében, például az Ubuntu 20.04-ben. További információ: GitHub-probléma dotnet/AspNetCore.Docs #23686.

A Linux windowsos alrendszere (WSL) létrehoz egy HTTPS önaláírt fejlesztési tanúsítványt, amely alapértelmezés szerint nem megbízható a Windowsban. A windowsos WSL-tanúsítvány megbízhatóságának legegyszerűbb módja, ha úgy konfigurálja a WSL-t, hogy ugyanazt a tanúsítványt használja, mint a Windows:

  • Windows rendszeren exportálja a fejlesztői tanúsítványt egy fájlba:

    dotnet dev-certs https -ep https.pfx -p $CREDENTIAL_PLACEHOLDER$ --trust
    

    Hol $CREDENTIAL_PLACEHOLDER$ található a jelszó?

  • Egy WSL-ablakban importálja az exportált tanúsítványt a WSL-példányon:

    dotnet dev-certs https --clean --import <<path-to-pfx>> --password $CREDENTIAL_PLACEHOLDER$
    

Az előző módszer tanúsítványonként és WSL-eloszlásonként egyszeri művelet. Egyszerűbb, mint a tanúsítvány újra és újra exportálása. Ha windows rendszeren frissíti vagy újragenerálja a tanúsítványt, előfordulhat, hogy újra kell futtatnia az előző parancsokat.

A tanúsítványokkal kapcsolatos problémák, például a nem megbízható tanúsítványok hibaelhárítása

Ez a szakasz segítséget nyújt a ASP.NET Core HTTPS-fejlesztési tanúsítvány telepítésekor és megbízhatóságában, de böngészőbeli figyelmeztetések vannak arról, hogy a tanúsítvány nem megbízható. A ASP.NET Core HTTPS fejlesztési tanúsítványt használja a Kestrelrendszer.

Az IIS Express-tanúsítvány javításához tekintse meg ezt a Stackoverflow-problémát .

Minden platform – a tanúsítvány nem megbízható

Futtassa az alábbi parancsot:

dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazás számára. A tanúsítványmegbízhatóságot a böngészők gyorsítótárazják.

dotnet dev-certs https --clean sikertelen

Az előző parancsok a böngésző megbízhatóságával kapcsolatos legtöbb problémát megoldják. Ha a böngésző továbbra sem bízik a tanúsítványban, kövesse az alábbi platformspecifikus javaslatokat.

Docker – a tanúsítvány nem megbízható

  • Törölje a C:\Users{USER}\AppData\Roaming\ASP.NET\Https mappát.
  • Tisztítsa meg az oldatot. Törölje a tároló, a és a obj, valamint a mappákat.
  • Indítsa újra a fejlesztőeszközt. Például a Visual Studio vagy a Visual Studio Code.

Windows – a tanúsítvány nem megbízható

  • Ellenőrizze a tanúsítványtárolóban található tanúsítványokat. Egy localhost tanúsítványnak kell lennie ASP.NET Core HTTPS development certificate barátságos névvel, mind Current User > Personal > Certificates mind Current User > Trusted root certification authorities > Certificates alatt.
  • Távolítsa el az összes talált tanúsítványt mind a személyes, mind a megbízható legfelső szintű hitelesítésszolgáltatóktól. Ne távolítsa el az IIS Express localhost tanúsítványt.
  • Futtassa az alábbi parancsot:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazás számára.

OS X – a tanúsítvány nem megbízható

  • Nyissa meg a KeyChain Accesst.
  • Válassza ki a rendszerkulcsláncot.
  • Ellenőrizze, hogy van-e localhost-tanúsítvány.
  • Ellenőrizze, hogy tartalmaz-e szimbólumot + az ikonon, hogy az az összes felhasználó számára megbízható-e.
  • Távolítsa el a tanúsítványt a rendszerkulcsláncból.
  • Futtassa az alábbi parancsot:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazás számára.

A Visual Studióval kapcsolatos tanúsítványproblémák elhárításához lásd: HTTPS-hiba az IIS Express használatával (dotnet/AspNetCore #16892).

A Linux-tanúsítvány nem megbízható

Ellenőrizze, hogy a megbízhatóságra konfigurált tanúsítvány a kiszolgáló által Kestrel használt felhasználói HTTPS fejlesztői tanúsítvány-e.

Ellenőrizze az aktuális felhasználó alapértelmezett HTTPS fejlesztői Kestrel tanúsítványát a következő helyen:

ls -la ~/.dotnet/corefx/cryptography/x509stores/my

A HTTPS fejlesztői Kestrel tanúsítványfájl az SHA1 lenyomatát tartalmazza. A fájl törlésekor a dotnet dev-certs https --clean rendszeren keresztül, szükség esetén, egy másik ujjlenyomattal újragenerálódik. Ellenőrizze az exportált tanúsítvány ujjlenyomatát az alábbi paranccsal:

openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crt

Ha a tanúsítvány nem egyezik, az a következők egyike lehet:

  • Egy régi tanúsítvány.
  • Exportált egy fejlesztői tanúsítványt a legfelső szintű felhasználó számára. Ebben az esetben exportálja a tanúsítványt.

A legfelső szintű felhasználói tanúsítvány a következő helyen ellenőrizhető:

ls -la /root/.dotnet/corefx/cryptography/x509stores/my

A Visual Studióval használt IIS Express SSL-tanúsítvány

Az IIS Express-tanúsítvánnyal kapcsolatos problémák megoldásához válassza a Visual Studio telepítőjének Javítás elemét. További információkért tekintse meg ezt a GitHub-problémát.

A csoportházirend megakadályozza az önaláírt tanúsítványok megbízhatóságát

Bizonyos esetekben a csoportházirend megakadályozhatja az önaláírt tanúsítványok megbízhatóságát. További információkért tekintse meg ezt a GitHub-problémát.

További információk

Warning

API-projektek

Ne használjon RequireHttpsAttribute olyan webes API-kat, amelyek bizalmas információkat kapnak. RequireHttpsAttribute HTTP-állapotkódokkal irányítja át a böngészőket a HTTP-ről a HTTPS-be. Előfordulhat, hogy az API-ügyfelek nem értik vagy nem tartják be a HTTP-ről HTTPS-re történő átirányításokat. Az ilyen ügyfelek HTTP-en keresztül küldhetnek információkat. A webes API-knak a következőkre van szükség:

  • Nem figyel a HTTP-n.
  • Zárja be a kapcsolatot a 400-ás állapotkóddal (hibás kérés), és ne szolgálja ki a kérést.

Ha le szeretné tiltani a HTTP-átirányítást egy API-ban, állítsa be a ASPNETCORE_URLS környezeti változót, vagy használja a parancssori --urls jelzőt. További információ: ASP.NET Core-futtatókörnyezetek és 5 módszer az ASP.NET Core-alkalmazások URL-címeinek beállítására Andrew Locktól.

HSTS- és API-projektek

Az alapértelmezett API-projektek nem tartalmazzák a HSTS-t , mivel a HSTS általában csak böngészőutasítás. Más hívók, például telefonos vagy asztali alkalmazások , nem tartják be az utasításokat. Még a böngészőkben is fennáll a veszélye annak, hogy egy API http-n keresztüli hitelesített hívása nem biztonságos hálózatokat veszélyeztet. A biztonságos megközelítés az API-projektek konfigurálása, hogy csak a HTTPS-en keresztül hallgassanak és válaszoljanak.

HTTPS megkövetelése

Javasoljuk, hogy az éles ASP.NET Core-webalkalmazások a következőket használják:

  • HTTPS-átirányítási köztes szoftver (UseHttpsRedirection) a HTTP-kérések HTTPS-be való átirányításához.
  • A HSTS köztes szoftver (UseHsts) HTTP Strict Transport Security (HSTS) protokollfejléceket küld az ügyfeleknek.

Note

A fordított proxykonfigurációban üzembe helyezett alkalmazások lehetővé teszik a proxy számára a kapcsolatbiztonság (HTTPS) kezelését. Ha a proxy a HTTPS-átirányítást is kezeli, nincs szükség HTTPS-átirányítási köztes szoftver használatára. Ha a proxykiszolgáló HSTS-fejlécek írását is kezeli (például natív HSTS-támogatás az IIS 10.0 -ban (1709) vagy újabb verziókban), az alkalmazás nem igényli a HSTS köztes szoftver használatát. További információ: HTTPS/HSTS letiltása a projektlétrehozáskor.

UseHttpsRedirection

A következő kód meghívja a UseHttpsRedirection az Startup osztályban:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
}

Az előző kiemelt kód:

Javasoljuk, hogy ideiglenes átirányításokat használjunk állandó átirányítások helyett. A linkek gyorsítótárazása instabil viselkedést okozhat a fejlesztési környezetekben. Ha inkább állandó átirányítási állapotkódot szeretne küldeni, amikor az alkalmazás nem Development környezetben van, tekintse meg az állandó átirányítások konfigurálása a gyártásban című szakaszt. Javasoljuk, hogy HSTS használatával jelezhesse az ügyfeleknek, hogy csak biztonságos erőforrás-kérelmeket kell küldeni az alkalmazásnak (csak éles környezetben).

Portkonfiguráció

A köztes szoftvernek elérhetőnek kell lennie egy portnak ahhoz, hogy egy nem biztonságos kérést átirányítson a HTTPS-be. Ha nincs elérhető port:

  • A HTTPS-hez való átirányítás nem történik meg.
  • A köztes szoftver naplózza a következő figyelmeztetést: "Nem sikerült meghatározni a https-portot az átirányításhoz."

Adja meg a HTTPS-portot az alábbi módszerek bármelyikével:

  • Állítsa be a HttpsRedirectionOptions.HttpsPort értékét.

  • Állítsa be a https_portgazdagép beállításait:

    • Gazdagépkonfigurációban.

    • A ASPNETCORE_HTTPS_PORT környezeti változó beállításával.

    • Úgy, hogy hozzáadsz egy legfelső szintű bejegyzést itt: appsettings.json.

      {
          "https_port": 443,
          "Logging": {
              "LogLevel": {
                  "Default": "Information",
                  "Microsoft": "Warning",
                  "Microsoft.Hosting.Lifetime": "Information"
              }
          },
          "AllowedHosts": "*"
      }
      
  • Jelöljön meg egy portot a biztonságos sémával a ASPNETCORE_URLS környezeti változó használatával. A környezeti változó konfigurálja a kiszolgálót. A köztes szoftver közvetetten felderíti a HTTPS-portot a IServerAddressesFeature. Ez a megközelítés nem működik fordított proxytelepítésekben.

  • A fejlesztés során állítson be egy HTTPS URL-címet a következőben launchsettings.json: . Engedélyezze a HTTPS-t az IIS Express használatakor.

  • HTTPS URL-végpontot kell konfigurálni a Kestrel kiszolgáló vagy a HTTP.sys kiszolgáló nyilvános elérhetőségű peremhálózati üzembe helyezéséhez. Az alkalmazás csak egy HTTPS-portot használ. A köztes szoftver a portot észleli a következőn keresztül: IServerAddressesFeature.

Note

Ha egy alkalmazás fordított proxykonfigurációban fut, IServerAddressesFeature nem érhető el. Állítsa be a portot az ebben a szakaszban ismertetett egyéb megközelítések egyikével.

Peremtelepítések

Ha Kestrel-t vagy HTTP.sys-t nyilvános elérésű peremkiszolgálóként használnak, Kestrel-t vagy HTTP.sys-t úgy kell konfigurálni, hogy mindkét kapcsolatra figyeljen:

  • A biztonságos port, amelyre az ügyfél át van irányítva (általában a 443-as port az éles környezetben, és az 5001-es a fejlesztési környezetben).
  • A nem biztonságos port (általában 80 éles környezetben és 5000 fejlesztési környezetben).

A nem biztonságos portot az ügyfélnek el kell érnie ahhoz, hogy az alkalmazás nem biztonságos kérést kapjon, és átirányíthassa az ügyfelet a biztonságos portra.

További információ: Kestrel végpontkonfiguráció vagy HTTP.sys webkiszolgáló implementálása a ASP.NET Core-ban.

Üzembe helyezési forgatókönyvek

Az ügyfél és a kiszolgáló közötti tűzfalnak nyitva kell lennie a forgalom számára nyitva lévő kommunikációs portokkal is.

Ha a kérések továbbítása fordított proxykonfigurációban történik, használja a továbbított fejlécek köztes szoftverét , mielőtt meghívja a HTTPS-átirányítási köztes szoftvereket. A továbbított fejlécek köztes rétege a Request.Scheme fejléc használatával frissíti a X-Forwarded-Proto fejlécet. A köztes szoftver lehetővé teszi az átirányítási URI-k és más biztonsági szabályzatok megfelelő működését. Ha a továbbított fejlécek köztes szoftverkomponenst nem használják, előfordulhat, hogy a háttéralkalmazás nem kapja meg a helyes sémát, emiatt pedig átirányítási hurokba kerül. Gyakori végfelhasználói hibaüzenet, hogy túl sok átirányítás történt.

Az Azure App Service-ben való üzembe helyezéskor kövesse az oktatóanyag útmutatását : Meglévő egyéni SSL-tanúsítvány kötése az Azure Web Appshez.

Beállítások

A köztes szoftver beállításainak konfigurálásához a következő kiemelt kódhívások AddHttpsRedirection :

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddHsts(options =>
    {
        options.Preload = true;
        options.IncludeSubDomains = true;
        options.MaxAge = TimeSpan.FromDays(60);
        options.ExcludedHosts.Add("example.com");
        options.ExcludedHosts.Add("www.example.com");
    });

    services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = (int) HttpStatusCode.TemporaryRedirect;
        options.HttpsPort = 5001;
    });
}

A hívás AddHttpsRedirection csak az értékek HttpsPortRedirectStatusCodemódosításához szükséges.

Az előző kiemelt kód:

Állandó átirányítások konfigurálása éles környezetben

A köztes szoftver alapértelmezésként egy Status307TemporaryRedirect küld az összes átirányításnál. Ha az állandó átirányítási állapotkódot szeretné küldeni, amikor az alkalmazás nem környezetiDevelopment állapotban van, csomagolja be a köztes szoftver beállításainak konfigurációját egy feltételes ellenőrzésbe, amely nem környezetiDevelopment állapotot tartalmaz.

Szolgáltatások konfigurálásakor a következő helyen Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    // IWebHostEnvironment (stored in _env) is injected into the Startup class.
    if (!_env.IsDevelopment())
    {
        services.AddHttpsRedirection(options =>
        {
            options.RedirectStatusCode = (int) HttpStatusCode.PermanentRedirect;
            options.HttpsPort = 443;
        });
    }
}

HTTPS-átirányítási köztes szoftver alternatív megközelítése

A HTTPS-átirányításra szolgáló köztes réteg (UseHttpsRedirection) használatának egyik alternatívája az URL-újraírásra szolgáló köztes réteg (AddRedirectToHttps) használata. AddRedirectToHttps az átirányítás végrehajtásakor az állapotkódot és a portot is beállíthatja. További információkért lásd: URL-átíró köztes szoftver.

Ha a HTTPS-hez a további átirányítási szabályok megkövetelése nélkül irányít át, javasoljuk, hogy a jelen cikkben ismertetett HTTPS-átirányítási köztes szoftver (UseHttpsRedirection) használatát használja.

HTTP Strict Transport Security (HSTS) protokoll

Az OWASP szerint a HTTP Strict Transport Security (HSTS) egy válaszfejlécen keresztül megadott, opt-in biztonsági fejlesztés, amelyet a webalkalmazás kínál. Ha a HSTS-t támogató böngésző a következő fejlécet kapja:

  • A böngésző tárolja a tartomány konfigurációját, amely megakadályozza a HTTP-en keresztüli kommunikáció küldését. A böngésző minden kommunikációt HTTPS-en keresztül kényszerít.
  • A böngésző megakadályozza, hogy a felhasználó nem megbízható vagy érvénytelen tanúsítványokat használ. A böngésző letiltja azokat a kéréseket, amelyek lehetővé teszik a felhasználó számára, hogy ideiglenesen megbízzanak egy ilyen tanúsítványban.

Mivel a HSTS-t az ügyfél kényszeríti ki, bizonyos korlátozásokkal rendelkezik:

  • Az ügyfélnek támogatnia kell a HSTS-t.
  • A HSTS legalább egy sikeres HTTPS-kérést igényel a HSTS-szabályzat létrehozásához.
  • Az alkalmazásnak minden HTTP-kérést ellenőriznie kell, és át kell irányítania vagy el kell utasítania a HTTP-kérést.

ASP.NET Core a HSTS-t bővítménymetódussal UseHsts implementálja. Az alábbi kódhívások UseHsts , ha az alkalmazás nincs fejlesztési módban:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
}

UseHsts nem ajánlott a fejlesztés során, mert a HSTS-beállításokat a böngészők könnyen gyorsítótárazhatják. Alapértelmezés szerint UseHsts kizárja a helyi visszacsatolási címet.

A HTTPS-t első alkalommal implementáló éles környezetekben állítsa a kezdeti HstsOptions.MaxAge értéket egy kis értékre az TimeSpan egyik metódus használatával. Állítsa be az értéket úgy, hogy órák helyett legfeljebb egy nap legyen, arra az esetre, ha vissza kell állítania a HTTPS-infrastruktúrát HTTP-re. Miután biztos a HTTPS-konfiguráció fenntarthatóságában, növelje a HSTS-értéket max-age ; a gyakran használt érték egy év.

A következő kód:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddHsts(options =>
    {
        options.Preload = true;
        options.IncludeSubDomains = true;
        options.MaxAge = TimeSpan.FromDays(60);
        options.ExcludedHosts.Add("example.com");
        options.ExcludedHosts.Add("www.example.com");
    });

    services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = (int) HttpStatusCode.TemporaryRedirect;
        options.HttpsPort = 5001;
    });
}
  • Beállítja a Strict-Transport-Security fejléc előbetöltési paraméterét. Az előzetes adatbetöltés nem része az RFC HSTS-specifikációnak, de a webböngészők támogatják a HSTS-webhelyek új telepítésre való előzetes betöltését. További információért lásd https://hstspreload.org/.
  • Engedélyezi az includeSubDomain beállítást, amely a HSTS-szabályzatot alkalmazza a Host altartományaira.
  • Az max-age fejléc Strict-Transport-Security paraméterét explicit módon 60 napra állítja be. Ha nincs beállítva, az alapértelmezett érték 30 nap. További információt a maximális életkorról szóló irányelvben talál.
  • A example.com elemet hozzáadja a kizárandó gazdagépek listájához.

UseHsts kizárja a következő visszacsatolási gazdagépeket:

  • localhost : Az IPv4 visszacsatolási címe.
  • 127.0.0.1 : Az IPv4 visszacsatolási címe.
  • [::1] : Az IPv6 visszacsatolási címe.

A HTTPS/HSTS letiltása projektlétrehozáskor

Bizonyos háttérszolgáltatás-forgatókönyvekben, ahol a kapcsolatbiztonság a hálózat nyilvános elérésű peremhálózatán van kezelve, nincs szükség a kapcsolatbiztonság konfigurálására az egyes csomópontokon. A Visual Studio sablonjaiból vagy a dotnet új parancsából létrehozott webalkalmazások engedélyezik a HTTPS-átirányítást és a HSTS-t. Az olyan üzemelő példányok esetében, amelyek nem igénylik ezeket a forgatókönyveket, kikapcsolhatja a HTTPS/HSTS szolgáltatást, ha az alkalmazás a sablonból jön létre.

A HTTPS/HSTS letiltása:

Törölje a jelölést a HTTPS konfigurálás jelölőnégyzetből.

További információ párbeszédpanel az Új ASP.NET Core Web App-sablonhoz, amelyen a Https-konfigurálás jelölőnégyzet látható

A ASP.NET Core HTTPS fejlesztési tanúsítvány megbízhatósága Windows és macOS rendszeren

A Firefox böngészőben lásd a következő szakaszt.

A .NET Core SDK tartalmaz egy HTTPS fejlesztési tanúsítványt. A tanúsítvány az első futtatás során települ. Az első futtatás dotnet new webapp például a következő kimenet egy variációját eredményezi:

Installed an ASP.NET Core HTTPS development certificate.
To trust the certificate, run 'dotnet dev-certs https --trust'
Learn about HTTPS: https://aka.ms/dotnet-https

A .NET Core SDK telepítése telepíti a ASP.NET Core HTTPS fejlesztési tanúsítványt a helyi felhasználói tanúsítványtárolóba. A tanúsítvány telepítve van, de nem megbízható. A tanúsítvány megbízhatóságához hajtsa végre az eszköz futtatásához dotnet dev-certs szükséges egyszeri lépést:

dotnet dev-certs https --trust

Az alábbi parancs segítséget nyújt az dotnet dev-certs eszközről:

dotnet dev-certs https --help

Warning

Ne hozzon létre fejlesztési tanúsítványt olyan környezetben, amely újraterjesztésre kerül, például tárolólemezképet vagy virtuális gépet. Ez hamisításhoz és jogosultságszint-emeléséhez vezethet. Ennek elkerülése érdekében állítsa a DOTNET_GENERATE_ASPNET_CERTIFICATE környezeti változót false a .NET CLI első meghívása előtt. Ez kihagyja a ASP.NET Core fejlesztési tanúsítvány automatikus létrehozását a parancssori felület első futtatása során.

Bízzon a HTTPS-tanúsítványban a Firefoxban a SEC_ERROR_INADEQUATE_KEY_USAGE hiba elkerülése érdekében

A Firefox böngésző saját tanúsítványtárolót használ, ezért nem bízik az IIS Express vagy Kestrel a fejlesztői tanúsítványokban.

A HTTPS-tanúsítványnak a Firefoxban való megbízhatóságára, szabályzatfájl létrehozására vagy a FireFox böngészővel való konfigurálására két módszer létezik. A böngészővel való konfigurálás létrehozza a szabályzatfájlt, így a két módszer egyenértékű.

Szabályzatfájl létrehozása HTTPS-tanúsítvány megbízhatóságához a Firefoxban

Hozzon létre egy szabályzatfájlt (policies.json) a következő helyen:

Adja hozzá a következő JSON-t a Firefox-házirendfájlhoz:

{
  "policies": {
    "Certificates": {
      "ImportEnterpriseRoots": true
    }
  }
}

Az előző szabályzatfájl a Windows tanúsítványtárolójában található megbízható tanúsítványokból származó Firefox megbízhatósági tanúsítványokat készít. A következő szakasz alternatív módszert kínál az előző szabályzatfájl létrehozásához a Firefox böngészővel.

HTTPS-tanúsítvány megbízhatóságának konfigurálása a Firefox böngészővel

Állítsa be security.enterprise_roots.enabled = true a következő utasítások felhasználásával.

  1. Adja meg about:config a Firefox böngészőben.
  2. Ha elfogadja a kockázatot, válassza a Kockázat elfogadása és a Folytatás lehetőséget.
  3. Válassza az Összes megjelenítése lehetőséget.
  4. Beállítás security.enterprise_roots.enabled = true.
  5. Lépjen ki és indítsa újra a Firefoxot.

További információ: Hitelesítésszolgáltatók beállítása a Firefoxban és a mozilla/policy-templates/README fájl.

Fejlesztői tanúsítvány beállítása a Dockerhez

Lásd ezt a GitHub-hibajegyet.

HTTPS-tanúsítvány megbízhatósága Linuxon

A bizalom kiépítése terjesztési és böngészőspecifikus feladat. Az alábbi szakaszok útmutatást nyújtanak néhány népszerű disztribúcióhoz, valamint a Chromium böngészőkhöz (Edge és Chrome) és a Firefoxhoz.

Az Ubuntu megbízik a tanúsítványban a szolgáltatásközi kommunikációhoz

  1. Telepítse az OpenSSL 1.1.1h vagy újabb verzióját. Az OpenSSL frissítésére vonatkozó útmutatásért tekintse meg a disztribúciót.

  2. Futtassa az alábbi parancsot:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    sudo update-ca-certificates
    

Az előző parancsok:

  • Győződjön meg arról, hogy az aktuális felhasználó fejlesztői tanúsítványa létrejött.
  • Exportálja a mappához ca-certificates szükséges emelt szintű engedélyekkel rendelkező tanúsítványt az aktuális felhasználó környezetének használatával.
  • Távolítsa el a -E jelölőt a root felhasználói tanúsítvány exportálásához, szükség esetén létrehozva azt. Minden újonnan létrehozott tanúsítvány más ujjlenyomattal rendelkezik. Ha gyökérként fut, sudo és -E nincs rá szükség.

Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

HTTPS-tanúsítvány megbízhatósága Linuxon az Edge vagy a Chrome használatával

Linuxon futó chromium böngészők esetén:

  • Telepítse a libnss3-tools-t a disztribúciójához.

  • Hozza létre vagy ellenőrizze, hogy a $HOME/.pki/nssdb mappa létezik-e a gépen.

  • Exportálja a tanúsítványt a következő paranccsal:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

  • Futtassa az alábbi parancsot:

    certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crt
    
  • Lépjen ki, és indítsa újra a böngészőt.

A tanúsítvány megbízhatósága a Linuxon futó Firefoxban

  • Exportálja a tanúsítványt a következő paranccsal:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

  • Hozzon létre egy JSON-fájlt /usr/lib/firefox/distribution/policies.json a következő tartalommal:

cat <<EOF | sudo tee /usr/lib/firefox/distribution/policies.json
{
    "policies": {
        "Certificates": {
            "Install": [
                "/usr/local/share/ca-certificates/aspnet/https.crt"
            ]
        }
    }
}
EOF

A szabályzatfájl böngészővel történő konfigurálásának alternatív módjáról ebben a cikkben a HTTPS-tanúsítvány megbízhatóságának konfigurálása a Firefox böngészővel című témakörben olvashat.

A tanúsítvány megbízhatósága a Fedora 34 használatával

Firefox a Fedora

echo 'pref("general.config.filename", "firefox.cfg");
pref("general.config.obscure_value", 0);' > ./autoconfig.js

echo '//Enable policies.json
lockPref("browser.policies.perUserDir", false);' > firefox.cfg

echo "{
    \"policies\": {
        \"Certificates\": {
            \"Install\": [
                \"aspnetcore-localhost-https.crt\"
            ]
        }
    }
}" > policies.json

dotnet dev-certs https -ep localhost.crt --format PEM

sudo mv autoconfig.js /usr/lib64/firefox/
sudo mv firefox.cfg /usr/lib64/firefox/
sudo mv policies.json /usr/lib64/firefox/distribution/
mkdir -p ~/.mozilla/certificates
cp localhost.crt ~/.mozilla/certificates/aspnetcore-localhost-https.crt
rm localhost.crt

Dotnet-to-dotnet megbízhatósága a Fedorán

sudo cp localhost.crt /etc/pki/tls/certs/localhost.pem
sudo update-ca-trust
rm localhost.crt

További információért tekintse meg ezt a GitHub-megjegyzést .

Bízzon a tanúsítványban más disztribúciókkal

Lásd ezt a GitHub-hibajegyet.

HTTPS-tanúsítvány megbízhatósága Linux rendszerhez készült Windows-alrendszerből

A Linux windowsos alrendszere (WSL) létrehoz egy HTTPS önaláírt fejlesztési tanúsítványt. A Windows-tanúsítványtároló konfigurálása a WSL-tanúsítvány megbízhatóságára:

  • Exportálja a fejlesztői tanúsítványt windowsos fájlba:

    dotnet dev-certs https -ep C:\<<path-to-folder>>\aspnetcore.pfx -p $CREDENTIAL_PLACEHOLDER$
    

    Hol $CREDENTIAL_PLACEHOLDER$ található a jelszó?

  • Egy WSL-ablakban importálja az exportált tanúsítványt a WSL-példányon:

    dotnet dev-certs https --clean --import /mnt/c/<<path-to-folder>>/aspnetcore.pfx -p $CREDENTIAL_PLACEHOLDER$
    

Az előző módszer tanúsítványonként és WSL-eloszlásonként egyszeri művelet. Egyszerűbb, mint a tanúsítvány újra és újra exportálása. Ha windows rendszeren frissíti vagy újragenerálja a tanúsítványt, előfordulhat, hogy újra kell futtatnia az előző parancsokat.

A tanúsítványokkal kapcsolatos problémák, például a nem megbízható tanúsítványok hibaelhárítása

Ez a szakasz segítséget nyújt a ASP.NET Core HTTPS-fejlesztési tanúsítvány telepítésekor és megbízhatóságában, de böngészőbeli figyelmeztetések vannak arról, hogy a tanúsítvány nem megbízható. A ASP.NET Core HTTPS fejlesztési tanúsítványt használja a Kestrelrendszer.

Az IIS Express-tanúsítvány javításához tekintse meg ezt a Stackoverflow-problémát .

Minden platform – a tanúsítvány nem megbízható

Futtassa az alábbi parancsot:

dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazásnak. A tanúsítványmegbízhatóságot a böngészők gyorsítótárazják.

dotnet dev-certs https --clean nem sikerült

Az előző parancsok a böngésző megbízhatóságával kapcsolatos legtöbb problémát megoldják. Ha a böngésző továbbra sem bízik a tanúsítványban, kövesse az alábbi platformspecifikus javaslatokat.

Docker – a tanúsítvány nem megbízható

  • Törölje a C:\Users{USER}\AppData\Roaming\ASP.NET\Https mappát.
  • Tisztítsa meg az oldatot. Törölje a tároló, a és a obj, valamint a mappákat.
  • Indítsa újra a fejlesztőeszközt. Ilyen például a Visual Studio, a Visual Studio Code vagy a Mac Visual Studio.

Windows – a tanúsítvány nem megbízható

  • Ellenőrizze a tanúsítványtárolóban található tanúsítványokat. Egy localhost tanúsítványnak kell lennie ASP.NET Core HTTPS development certificate barátságos névvel, mind Current User > Personal > Certificates mind Current User > Trusted root certification authorities > Certificates alatt.
  • Távolítsa el az összes talált tanúsítványt mind a személyes, mind a megbízható legfelső szintű hitelesítésszolgáltatóktól. Ne távolítsa el az IIS Express localhost tanúsítványt.
  • Futtassa az alábbi parancsot:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazásnak. A tanúsítványmegbízhatóságot a böngészők gyorsítótárazják.

OS X – a tanúsítvány nem megbízható

  • Nyissa meg a KeyChain Accesst.
  • Válassza ki a rendszerkulcsláncot.
  • Ellenőrizze, hogy van-e localhost-tanúsítvány.
  • Ellenőrizze, hogy tartalmaz-e szimbólumot + az ikonon, hogy az az összes felhasználó számára megbízható-e.
  • Távolítsa el a tanúsítványt a rendszerkulcsláncból.
  • Futtassa az alábbi parancsot:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazásnak. A tanúsítványmegbízhatóságot a böngészők gyorsítótárazják.

A Visual Studióval kapcsolatos tanúsítványproblémák elhárításához lásd: HTTPS-hiba az IIS Express használatával (dotnet/AspNetCore #16892).

A Linux-tanúsítvány nem megbízható

Ellenőrizze, hogy a megbízhatóságra konfigurált tanúsítvány a kiszolgáló által Kestrel használt felhasználói HTTPS fejlesztői tanúsítvány-e.

Ellenőrizze az aktuális felhasználó alapértelmezett HTTPS fejlesztői Kestrel tanúsítványát a következő helyen:

ls -la ~/.dotnet/corefx/cryptography/x509stores/my

A HTTPS fejlesztői Kestrel tanúsítványfájl az SHA1 lenyomatát tartalmazza. A fájl törlésekor a dotnet dev-certs https --clean rendszeren keresztül, szükség esetén, egy másik ujjlenyomattal újragenerálódik. Ellenőrizze az exportált tanúsítvány ujjlenyomatát az alábbi paranccsal:

openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crt

Ha a tanúsítvány nem egyezik, az a következők egyike lehet:

  • Egy régi tanúsítvány.
  • Exportált egy fejlesztői tanúsítványt a legfelső szintű felhasználó számára. Ebben az esetben exportálja a tanúsítványt.

A legfelső szintű felhasználói tanúsítvány a következő helyen ellenőrizhető:

ls -la /root/.dotnet/corefx/cryptography/x509stores/my

A Visual Studióval használt IIS Express SSL-tanúsítvány

Az IIS Express-tanúsítvánnyal kapcsolatos problémák megoldásához válassza a Visual Studio telepítőjének Javítás elemét. További információkért tekintse meg ezt a GitHub-problémát.

További információk

Note

Ha .NET 9 vagy újabb SDK-t használ, tekintse meg a cikk .NET 9-es verziójában található frissített Linux-eljárásokat.

Warning

API-projektek

Ne használjon RequireHttpsAttribute olyan webes API-kat, amelyek bizalmas információkat kapnak. RequireHttpsAttribute HTTP-állapotkódokkal irányítja át a böngészőket a HTTP-ről a HTTPS-be. Előfordulhat, hogy az API-ügyfelek nem értik vagy nem tartják be a HTTP-ről HTTPS-re történő átirányításokat. Az ilyen ügyfelek HTTP-en keresztül küldhetnek információkat. A webes API-knak a következőkre van szükség:

  • Nem figyel a HTTP-n.
  • Zárja be a kapcsolatot a 400-ás állapotkóddal (hibás kérés), és ne szolgálja ki a kérést.

Ha le szeretné tiltani a HTTP-átirányítást egy API-ban, állítsa be a ASPNETCORE_URLS környezeti változót, vagy használja a parancssori --urls jelzőt. További információ: ASP.NET Core futtatókörnyezetek és 8 módszer az ASP.NET Core-alkalmazások URL-címeinek beállítására Andrew Lock által.

HSTS- és API-projektek

Az alapértelmezett API-projektek nem tartalmazzák a HSTS-t , mivel a HSTS általában csak böngészőutasítás . Más hívók, például telefonos vagy asztali alkalmazások , nem tartják be az utasításokat. Még a böngészőkben is fennáll a veszélye annak, hogy egy API http-n keresztüli hitelesített hívása nem biztonságos hálózatokat veszélyeztet. A biztonságos megközelítés az API-projektek konfigurálása, hogy csak a HTTPS-en keresztül hallgassanak és válaszoljanak.

A HTTP-ről HTTPS-re történő átirányítás ERR_INVALID_REDIRECT hibát okoz a CORS-elővizsgálati kérelemben.

A HTTP-t használó végpontra irányuló kérelmek, amelyeket a UseHttpsRedirection HTTPS-re átirányítanak, sikertelenek a CORS elővizsgálati kérelem során ERR_INVALID_REDIRECT.

Az API-projektek elutasíthatják a HTTP-kéréseket, ahelyett, hogy UseHttpsRedirection segítségével irányítanák át a kéréseket HTTPS-re.

HTTPS megkövetelése

Javasoljuk, hogy az éles ASP.NET Core-webalkalmazások a következőket használják:

  • HTTPS-átirányítási köztes szoftver (UseHttpsRedirection) a HTTP-kérések HTTPS-be való átirányításához.
  • A HSTS köztes szoftver (UseHsts) HTTP Strict Transport Security (HSTS) protokollfejléceket küld az ügyfeleknek.

Note

A fordított proxykonfigurációban üzembe helyezett alkalmazások lehetővé teszik a proxy számára a kapcsolatbiztonság (HTTPS) kezelését. Ha a proxy a HTTPS-átirányítást is kezeli, nincs szükség HTTPS-átirányítási köztes szoftver használatára. Ha a proxykiszolgáló HSTS-fejlécek írását is kezeli (például natív HSTS-támogatás az IIS 10.0 -ban (1709) vagy újabb verziókban), az alkalmazás nem igényli a HSTS köztes szoftver használatát. További információ: HTTPS/HSTS letiltása a projektlétrehozáskor.

HTTPS átirányítási köztes szoftver (UseHttpsRedirection)

A következő kódhívás a UseHttpsRedirection fájlban található: Program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Az előző kiemelt kód:

Javasoljuk, hogy ideiglenes átirányításokat használjunk állandó átirányítások helyett. A linkek gyorsítótárazása instabil viselkedést okozhat a fejlesztési környezetekben. Ha inkább állandó átirányítási állapotkódot szeretne küldeni, amikor az alkalmazás nem Development környezetben van, tekintse meg az állandó átirányítások konfigurálása a gyártásban című szakaszt. Javasoljuk, hogy HSTS használatával jelezhesse az ügyfeleknek, hogy csak biztonságos erőforrás-kérelmeket kell küldeni az alkalmazásnak (csak éles környezetben).

Portkonfiguráció

A köztes szoftvernek elérhetőnek kell lennie egy portnak ahhoz, hogy egy nem biztonságos kérést átirányítson a HTTPS-be. Ha nincs elérhető port:

  • A HTTPS-hez való átirányítás nem történik meg.
  • A köztes szoftver naplózza a következő figyelmeztetést: "Nem sikerült meghatározni a https-portot az átirányításhoz."

Adja meg a HTTPS-portot az alábbi módszerek bármelyikével:

  • Állítsa be a HttpsRedirectionOptions.HttpsPort értékét.

  • Állítsa be a https_portgazdagép beállításait:

    • Gazdagépkonfigurációban.

    • A ASPNETCORE_HTTPS_PORT környezeti változó beállításával.

    • Úgy, hogy hozzáadsz egy legfelső szintű bejegyzést itt: appsettings.json.

      {
        "https_port": 443,
        "Logging": {
          "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
          }
        },
        "AllowedHosts": "*"
      }
      
  • Jelöljön meg egy portot a biztonságos sémával a ASPNETCORE_URLS környezeti változó használatával. A környezeti változó konfigurálja a kiszolgálót. A köztes szoftver közvetetten felderíti a HTTPS-portot a IServerAddressesFeature. Ez a megközelítés nem működik fordított proxytelepítésekben.

  • Az ASP.NET Core-websablonok HTTPS-URL címet állítanak be a Properties/launchsettings.json mind a Kestrel mind az IIS Express számára. launchsettings.json csak a helyi gépen használható.

  • HTTPS URL-végpontot kell konfigurálni a Kestrel kiszolgáló vagy a HTTP.sys kiszolgáló nyilvános elérhetőségű peremhálózati üzembe helyezéséhez. Az alkalmazás csak egy HTTPS-portot használ. A köztes szoftver a portot észleli a következőn keresztül: IServerAddressesFeature.

Note

Ha egy alkalmazás fordított proxykonfigurációban fut, IServerAddressesFeature nem érhető el. Állítsa be a portot az ebben a szakaszban ismertetett egyéb megközelítések egyikével.

Peremtelepítések

Amikor Kestrel vagy HTTP.sys nyilvános elérésű edge szerverként van használva, akkor Kestrel vagy HTTP.sys úgy kell konfigurálni, hogy mindkettőt figyelje.

  • A biztonságos port, amelyre az ügyfél át van irányítva (általában a 443-as port az éles környezetben, és az 5001-es a fejlesztési környezetben).
  • A nem biztonságos port (általában 80 éles környezetben és 5000 fejlesztési környezetben).

A nem biztonságos portot az ügyfélnek el kell érnie ahhoz, hogy az alkalmazás nem biztonságos kérést kapjon, és átirányíthassa az ügyfelet a biztonságos portra.

További információ: Kestrel végpontkonfiguráció vagy HTTP.sys webkiszolgáló implementálása a ASP.NET Core-ban.

Üzembe helyezési forgatókönyvek

Az ügyfél és a kiszolgáló közötti tűzfalnak nyitva kell lennie a forgalom számára nyitva lévő kommunikációs portokkal is.

Ha a kérések továbbítása fordított proxykonfigurációban történik, használja a továbbított fejlécek köztes szoftverét , mielőtt meghívja a HTTPS-átirányítási köztes szoftvereket. A továbbított fejlécek köztes rétege a Request.Scheme fejléc használatával frissíti a X-Forwarded-Proto fejlécet. A köztes szoftver lehetővé teszi az átirányítási URI-k és más biztonsági szabályzatok megfelelő működését. Ha a továbbított fejlécek köztes szoftverkomponenst nem használják, előfordulhat, hogy a háttéralkalmazás nem kapja meg a helyes sémát, emiatt pedig átirányítási hurokba kerül. Gyakori végfelhasználói hibaüzenet, hogy túl sok átirányítás történt.

Az Azure App Service-ben való üzembe helyezéskor kövesse az oktatóanyag útmutatását : Meglévő egyéni SSL-tanúsítvány kötése az Azure Web Appshez.

Beállítások

A köztes szoftver beállításainak konfigurálásához a következő kiemelt kódhívások AddHttpsRedirection :

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddHsts(options =>
{
    options.Preload = true;
    options.IncludeSubDomains = true;
    options.MaxAge = TimeSpan.FromDays(60);
    options.ExcludedHosts.Add("example.com");
    options.ExcludedHosts.Add("www.example.com");
});

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = Status307TemporaryRedirect;
    options.HttpsPort = 5001;
});

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

A hívás AddHttpsRedirection csak az értékek HttpsPortRedirectStatusCodemódosításához szükséges.

Az előző kiemelt kód:

Állandó átirányítások konfigurálása éles környezetben

A köztes szoftver alapértelmezésként egy Status307TemporaryRedirect küld az összes átirányításnál. Ha az állandó átirányítási állapotkódot szeretné küldeni, amikor az alkalmazás nem környezetiDevelopment állapotban van, csomagolja be a köztes szoftver beállításainak konfigurációját egy feltételes ellenőrzésbe, amely nem környezetiDevelopment állapotot tartalmaz.

Szolgáltatások konfigurálásakor a következő helyen Program.cs:

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

if (!builder.Environment.IsDevelopment())
{
    builder.Services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = Status308PermanentRedirect;
        options.HttpsPort = 443;
    });
}

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");

    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

HTTPS-átirányítási köztes szoftver alternatív megközelítése

A HTTPS-átirányításra szolgáló köztes réteg (UseHttpsRedirection) használatának egyik alternatívája az URL-újraírásra szolgáló köztes réteg (AddRedirectToHttps) használata. AddRedirectToHttps az átirányítás végrehajtásakor az állapotkódot és a portot is beállíthatja. További információkért lásd: URL-átíró köztes szoftver.

Ha a HTTPS-hez a további átirányítási szabályok megkövetelése nélkül irányít át, javasoljuk, hogy a jelen cikkben ismertetett HTTPS-átirányítási köztes szoftver (UseHttpsRedirection) használatát használja.

HTTP Strict Transport Security (HSTS) protokoll

Az OWASP szerint a HTTP Strict Transport Security (HSTS) egy válaszfejlécen keresztül megadott, opt-in biztonsági fejlesztés, amelyet a webalkalmazás kínál. Ha a HSTS-t támogató böngésző a következő fejlécet kapja:

  • A böngésző tárolja a tartomány konfigurációját, amely megakadályozza a HTTP-en keresztüli kommunikáció küldését. A böngésző minden kommunikációt HTTPS-en keresztül kényszerít.
  • A böngésző megakadályozza, hogy a felhasználó nem megbízható vagy érvénytelen tanúsítványokat használ. A böngésző letiltja azokat a kéréseket, amelyek lehetővé teszik a felhasználó számára, hogy ideiglenesen megbízzanak egy ilyen tanúsítványban.

Mivel a HSTS-t az ügyfél kényszeríti ki, bizonyos korlátozásokkal rendelkezik:

  • Az ügyfélnek támogatnia kell a HSTS-t.
  • A HSTS legalább egy sikeres HTTPS-kérést igényel a HSTS-szabályzat létrehozásához.
  • Az alkalmazásnak minden HTTP-kérést ellenőriznie kell, és át kell irányítania vagy el kell utasítania a HTTP-kérést.

ASP.NET Core a HSTS-t bővítménymetódussal UseHsts implementálja. Az alábbi kódhívások UseHsts , ha az alkalmazás nincs fejlesztési módban:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

UseHsts nem ajánlott a fejlesztés során, mert a HSTS-beállításokat a böngészők könnyen gyorsítótárazhatják. Alapértelmezés szerint UseHsts kizárja a helyi visszacsatolási címet.

A HTTPS-t első alkalommal implementáló éles környezetekben állítsa a kezdeti HstsOptions.MaxAge értéket egy kis értékre az TimeSpan egyik metódus használatával. Állítsa be az értéket úgy, hogy órák helyett legfeljebb egy nap legyen, arra az esetre, ha vissza kell állítania a HTTPS-infrastruktúrát HTTP-re. Miután biztos a HTTPS-konfiguráció fenntarthatóságában, növelje a HSTS-értéket max-age ; a gyakran használt érték egy év.

A következő kiemelt kód:

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddHsts(options =>
{
    options.Preload = true;
    options.IncludeSubDomains = true;
    options.MaxAge = TimeSpan.FromDays(60);
    options.ExcludedHosts.Add("example.com");
    options.ExcludedHosts.Add("www.example.com");
});

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = Status307TemporaryRedirect;
    options.HttpsPort = 5001;
});

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();
  • Beállítja a Strict-Transport-Security fejléc előbetöltési paraméterét. Az előzetes adatbetöltés nem része az RFC HSTS-specifikációnak, de a webböngészők támogatják a HSTS-webhelyek új telepítésre való előzetes betöltését. További információért lásd https://hstspreload.org/.
  • Engedélyezi az includeSubDomain beállítást, amely a HSTS-szabályzatot alkalmazza a Host altartományaira.
  • Az max-age fejléc Strict-Transport-Security paraméterét explicit módon 60 napra állítja be. Ha nincs beállítva, az alapértelmezett érték 30 nap. További információt a maximális életkorról szóló irányelvben talál.
  • A example.com elemet hozzáadja a kizárandó gazdagépek listájához.

UseHsts kizárja a következő visszacsatolási gazdagépeket:

  • localhost : Az IPv4 visszacsatolási címe.
  • 127.0.0.1 : Az IPv4 visszacsatolási címe.
  • [::1] : Az IPv6 visszacsatolási címe.

A HTTPS/HSTS letiltása projektlétrehozáskor

Bizonyos háttérszolgáltatás-forgatókönyvekben, ahol a kapcsolatbiztonság a hálózat nyilvános elérésű peremhálózatán van kezelve, nincs szükség a kapcsolatbiztonság konfigurálására az egyes csomópontokon. A Visual Studio sablonjaiból vagy a dotnet új parancsából létrehozott webalkalmazások engedélyezik a HTTPS-átirányítást és a HSTS-t. Az olyan üzemelő példányok esetében, amelyek nem igénylik ezeket a forgatókönyveket, kikapcsolhatja a HTTPS/HSTS szolgáltatást, ha az alkalmazás a sablonból jön létre.

A HTTPS/HSTS letiltása:

Törölje a jelölést a HTTPS konfigurálás jelölőnégyzetből.

Új ASP.NET Core webalkalmazás párbeszédpanel, amelyen a Https-konfigurálás jelölőnégyzet nincs bejelölve.

A ASP.NET Core HTTPS fejlesztési tanúsítvány megbízhatósága Windows és macOS rendszeren

A Firefox böngészőben lásd a következő szakaszt.

A .NET Core SDK tartalmaz egy HTTPS fejlesztési tanúsítványt. A tanúsítvány az első futtatás során települ. Például dotnet --info a következő kimenet egy változata jelenik meg:

ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.

A .NET Core SDK telepítése telepíti a ASP.NET Core HTTPS fejlesztési tanúsítványt a helyi felhasználói tanúsítványtárolóba. A tanúsítvány telepítve van, de nem megbízható. A tanúsítvány megbízhatóságához hajtsa végre az eszköz futtatásához dotnet dev-certs szükséges egyszeri lépést:

dotnet dev-certs https --trust

Az alábbi parancs segítséget nyújt az dotnet dev-certs eszközről:

dotnet dev-certs https --help

Warning

Ne hozzon létre fejlesztési tanúsítványt olyan környezetben, amely újraterjesztésre kerül, például tárolólemezképet vagy virtuális gépet. Ez hamisításhoz és jogosultságszint-emeléséhez vezethet. Ennek elkerülése érdekében állítsa a DOTNET_GENERATE_ASPNET_CERTIFICATE környezeti változót false a .NET CLI első meghívása előtt. Ez kihagyja a ASP.NET Core fejlesztési tanúsítvány automatikus létrehozását a parancssori felület első futtatása során.

Bízzon a HTTPS-tanúsítványban a Firefoxban a SEC_ERROR_INADEQUATE_KEY_USAGE hiba elkerülése érdekében

A Firefox böngésző saját tanúsítványtárolót használ, ezért nem bízik az IIS Express vagy Kestrel a fejlesztői tanúsítványokban.

A HTTPS-tanúsítványnak a Firefoxban való megbízhatóságára, szabályzatfájl létrehozására vagy a FireFox böngészővel való konfigurálására két módszer létezik. A böngészővel való konfigurálás létrehozza a szabályzatfájlt, így a két módszer egyenértékű.

Szabályzatfájl létrehozása HTTPS-tanúsítvány megbízhatóságához a Firefoxban

Hozzon létre egy szabályzatfájlt (policies.json) a következő helyen:

Adja hozzá a következő JSON-t a Firefox-házirendfájlhoz:

{
  "policies": {
    "Certificates": {
      "ImportEnterpriseRoots": true
    }
  }
}

Az előző szabályzatfájl a Windows tanúsítványtárolójában található megbízható tanúsítványokból származó Firefox megbízhatósági tanúsítványokat készít. A következő szakasz alternatív módszert kínál az előző szabályzatfájl létrehozásához a Firefox böngészővel.

HTTPS-tanúsítvány megbízhatóságának konfigurálása a Firefox böngészővel

Állítsa be security.enterprise_roots.enabled = true a következő utasítások felhasználásával.

  1. Adja meg about:config a Firefox böngészőben.
  2. Ha elfogadja a kockázatot, válassza a Kockázat elfogadása és a Folytatás lehetőséget.
  3. Válassza az Összes megjelenítése lehetőséget
  4. Beállít security.enterprise_roots.enabled = true
  5. Kilépés és újraindítás a Firefoxból

További információ: Hitelesítésszolgáltatók beállítása a Firefoxban és a mozilla/policy-templates/README fájl.

Fejlesztői tanúsítvány beállítása a Dockerhez

Lásd ezt a GitHub-hibajegyet.

HTTPS-tanúsítvány megbízhatósága Linuxon

A bizalom kiépítése terjesztési és böngészőspecifikus feladat. Az alábbi szakaszok útmutatást nyújtanak néhány népszerű disztribúcióhoz, valamint a Chromium böngészőkhöz (Edge és Chrome) és a Firefoxhoz.

Az Ubuntu megbízik a tanúsítványban a szolgáltatásközi kommunikációhoz

Az alábbi utasítások nem működnek egyes Ubuntu-verziókhoz, például a 20.04-hez. További információ: GitHub-probléma dotnet/AspNetCore.Docs #23686.

  1. Telepítse az OpenSSL 1.1.1h vagy újabb verzióját. Az OpenSSL frissítésére vonatkozó útmutatásért tekintse meg a disztribúciót.

  2. Futtassa az alábbi parancsot:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    sudo update-ca-certificates
    

Az előző parancsok:

  • Győződjön meg arról, hogy az aktuális felhasználó fejlesztői tanúsítványa létrejött.
  • Exportálja a mappához ca-certificates szükséges emelt szintű engedélyekkel rendelkező tanúsítványt az aktuális felhasználó környezetének használatával.
  • A -E jelző eltávolítása exportálja a fő felhasználói tanúsítványt, és szükség esetén létrehozza. Minden újonnan létrehozott tanúsítvány más ujjlenyomattal rendelkezik. Ha gyökérként fut, sudo és -E nincs rá szükség.

Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

HTTPS-tanúsítvány megbízhatósága Linuxon az Edge vagy a Chrome használatával

Linuxon futó chromium böngészők esetén:

  • Telepítse a libnss3-tools-t a disztribúciójához.

  • Hozza létre vagy ellenőrizze, hogy a $HOME/.pki/nssdb mappa létezik-e a gépen.

  • Exportálja a tanúsítványt a következő paranccsal:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

  • Futtassa az alábbi parancsot:

    certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crt
    
  • Lépjen ki, és indítsa újra a böngészőt.

A tanúsítvány megbízhatósága a Linuxon futó Firefoxban

  • Exportálja a tanúsítványt a következő paranccsal:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

  • Hozzon létre egy JSON-fájlt /usr/lib/firefox/distribution/policies.json a következő paranccsal:

cat <<EOF | sudo tee /usr/lib/firefox/distribution/policies.json
{
    "policies": {
        "Certificates": {
            "Install": [
                "/usr/local/share/ca-certificates/aspnet/https.crt"
            ]
        }
    }
}
EOF

Megjegyzés: Az Ubuntu 21.10 Firefox snap csomagként érkezik, és a telepítési mappa /snap/firefox/current/usr/lib/firefox.

A szabályzatfájl böngészővel történő konfigurálásának alternatív módjáról ebben a cikkben a HTTPS-tanúsítvány megbízhatóságának konfigurálása a Firefox böngészővel című témakörben olvashat.

A tanúsítvány megbízhatósága a Fedora 34 használatával

See:

Bízzon a tanúsítványban más disztribúciókkal

Lásd ezt a GitHub-hibajegyet.

HTTPS-tanúsítvány megbízhatósága Linux rendszerhez készült Windows-alrendszerből

Az alábbi utasítások nem működnek egyes Linux-disztribúciók esetében, például az Ubuntu 20.04-ben. További információ: GitHub-probléma dotnet/AspNetCore.Docs #23686.

A Linux windowsos alrendszere (WSL) létrehoz egy HTTPS önaláírt fejlesztési tanúsítványt, amely alapértelmezés szerint nem megbízható a Windowsban. A windowsos WSL-tanúsítvány megbízhatóságának legegyszerűbb módja, ha úgy konfigurálja a WSL-t, hogy ugyanazt a tanúsítványt használja, mint a Windows:

  • Windows rendszeren exportálja a fejlesztői tanúsítványt egy fájlba:

    dotnet dev-certs https -ep https.pfx -p $CREDENTIAL_PLACEHOLDER$ --trust
    

    Hol $CREDENTIAL_PLACEHOLDER$ található a jelszó?

  • Egy WSL-ablakban importálja az exportált tanúsítványt a WSL-példányon:

    dotnet dev-certs https --clean --import <<path-to-pfx>> --password $CREDENTIAL_PLACEHOLDER$
    

Az előző módszer tanúsítványonként és WSL-eloszlásonként egyszeri művelet. Egyszerűbb, mint a tanúsítvány újra és újra exportálása. Ha windows rendszeren frissíti vagy újragenerálja a tanúsítványt, előfordulhat, hogy újra kell futtatnia az előző parancsokat.

A tanúsítványokkal kapcsolatos problémák, például a nem megbízható tanúsítványok hibaelhárítása

Ez a szakasz segítséget nyújt a ASP.NET Core HTTPS-fejlesztési tanúsítvány telepítésekor és megbízhatóságában, de böngészőbeli figyelmeztetések vannak arról, hogy a tanúsítvány nem megbízható. A ASP.NET Core HTTPS fejlesztési tanúsítványt használja a Kestrelrendszer.

Az IIS Express-tanúsítvány javításához tekintse meg ezt a Stackoverflow-problémát .

Minden platform – a tanúsítvány nem megbízható

Futtassa az alábbi parancsot:

dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazás számára. A tanúsítványmegbízhatóságot a böngészők gyorsítótárazják.

dotnet dev-certs https --clean sikertelen

Az előző parancsok a böngésző megbízhatóságával kapcsolatos legtöbb problémát megoldják. Ha a böngésző továbbra sem bízik a tanúsítványban, kövesse az alábbi platformspecifikus javaslatokat.

Docker – a tanúsítvány nem megbízható

  • Törölje a C:\Users{USER}\AppData\Roaming\ASP.NET\Https mappát.
  • Tisztítsa meg az oldatot. Törölje a tároló, a és a obj, valamint a mappákat.
  • Indítsa újra a fejlesztőeszközt. Például a Visual Studio vagy a Visual Studio Code.

Windows – a tanúsítvány nem megbízható

  • Ellenőrizze a tanúsítványtárolóban található tanúsítványokat. Egy localhost tanúsítványnak kell lennie ASP.NET Core HTTPS development certificate barátságos névvel, mind Current User > Personal > Certificates mind Current User > Trusted root certification authorities > Certificates alatt.
  • Távolítsa el az összes talált tanúsítványt mind a személyes, mind a megbízható legfelső szintű hitelesítésszolgáltatóktól. Ne távolítsa el az IIS Express localhost tanúsítványt.
  • Futtassa az alábbi parancsot:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazás számára.

OS X – a tanúsítvány nem megbízható

  • Nyissa meg a KeyChain Accesst.
  • Válassza ki a rendszerkulcsláncot.
  • Ellenőrizze, hogy van-e localhost-tanúsítvány.
  • Ellenőrizze, hogy tartalmaz-e szimbólumot + az ikonon, hogy az az összes felhasználó számára megbízható-e.
  • Távolítsa el a tanúsítványt a rendszerkulcsláncból.
  • Futtassa az alábbi parancsot:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazás számára.

A Visual Studióval kapcsolatos tanúsítványproblémák elhárításához lásd: HTTPS-hiba az IIS Express használatával (dotnet/AspNetCore #16892).

A Linux-tanúsítvány nem megbízható

Ellenőrizze, hogy a megbízhatóságra konfigurált tanúsítvány a kiszolgáló által Kestrel használt felhasználói HTTPS fejlesztői tanúsítvány-e.

Ellenőrizze az aktuális felhasználó alapértelmezett HTTPS fejlesztői Kestrel tanúsítványát a következő helyen:

ls -la ~/.dotnet/corefx/cryptography/x509stores/my

A HTTPS fejlesztői Kestrel tanúsítványfájl az SHA1 lenyomatát tartalmazza. A fájl törlésekor a dotnet dev-certs https --clean rendszeren keresztül, szükség esetén, egy másik ujjlenyomattal újragenerálódik. Ellenőrizze az exportált tanúsítvány ujjlenyomatát az alábbi paranccsal:

openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crt

Ha a tanúsítvány nem egyezik, az a következők egyike lehet:

  • Egy régi tanúsítvány.
  • Exportált egy fejlesztői tanúsítványt a legfelső szintű felhasználó számára. Ebben az esetben exportálja a tanúsítványt.

A legfelső szintű felhasználói tanúsítvány a következő helyen ellenőrizhető:

ls -la /root/.dotnet/corefx/cryptography/x509stores/my

A Visual Studióval használt IIS Express SSL-tanúsítvány

Az IIS Express-tanúsítvánnyal kapcsolatos problémák megoldásához válassza a Visual Studio telepítőjének Javítás elemét. További információkért tekintse meg ezt a GitHub-problémát.

A csoportházirend megakadályozza az önaláírt tanúsítványok megbízhatóságát

Bizonyos esetekben a csoportházirend megakadályozhatja az önaláírt tanúsítványok megbízhatóságát. További információkért tekintse meg ezt a GitHub-problémát.

További információk

Note

Ha .NET 9 vagy újabb SDK-t használ, tekintse meg a cikk .NET 9-es verziójában található frissített Linux-eljárásokat.

Warning

API-projektek

Ne használjon RequireHttpsAttribute olyan webes API-kat, amelyek bizalmas információkat kapnak. RequireHttpsAttribute HTTP-állapotkódokkal irányítja át a böngészőket a HTTP-ről a HTTPS-be. Előfordulhat, hogy az API-ügyfelek nem értik vagy nem tartják be a HTTP-ről HTTPS-re történő átirányításokat. Az ilyen ügyfelek HTTP-en keresztül küldhetnek információkat. A webes API-knak a következőkre van szükség:

  • Nem figyel a HTTP-n.
  • Zárja be a kapcsolatot a 400-ás állapotkóddal (hibás kérés), és ne szolgálja ki a kérést.

Ha le szeretné tiltani a HTTP-átirányítást egy API-ban, állítsa be a ASPNETCORE_URLS környezeti változót, vagy használja a parancssori --urls jelzőt. További információ: ASP.NET Core futtatókörnyezetek és 8 módszer az ASP.NET Core-alkalmazások URL-címeinek beállítására Andrew Lock által.

HSTS- és API-projektek

Az alapértelmezett API-projektek nem tartalmazzák a HSTS-t , mivel a HSTS általában csak böngészőutasítás . Más hívók, például telefonos vagy asztali alkalmazások , nem tartják be az utasításokat. Még a böngészőkben is fennáll a veszélye annak, hogy egy API http-n keresztüli hitelesített hívása nem biztonságos hálózatokat veszélyeztet. A biztonságos megközelítés az API-projektek konfigurálása, hogy csak a HTTPS-en keresztül hallgassanak és válaszoljanak.

A HTTP-ről HTTPS-re történő átirányítás ERR_INVALID_REDIRECT hibát okoz a CORS-elővizsgálati kérelemben.

A HTTP-t használó végpontra irányuló kérelmek, amelyeket a UseHttpsRedirection HTTPS-re átirányítanak, sikertelenek a CORS elővizsgálati kérelem során ERR_INVALID_REDIRECT.

Az API-projektek elutasíthatják a HTTP-kéréseket, ahelyett, hogy UseHttpsRedirection segítségével irányítanák át a kéréseket HTTPS-re.

HTTPS megkövetelése

Javasoljuk, hogy az éles ASP.NET Core-webalkalmazások a következőket használják:

  • HTTPS-átirányítási köztes szoftver (UseHttpsRedirection) a HTTP-kérések HTTPS-be való átirányításához.
  • A HSTS köztes szoftver (UseHsts) HTTP Strict Transport Security (HSTS) protokollfejléceket küld az ügyfeleknek.

Note

A fordított proxykonfigurációban üzembe helyezett alkalmazások lehetővé teszik a proxy számára a kapcsolatbiztonság (HTTPS) kezelését. Ha a proxy a HTTPS-átirányítást is kezeli, nincs szükség HTTPS-átirányítási köztes szoftver használatára. Ha a proxykiszolgáló HSTS-fejlécek írását is kezeli (például natív HSTS-támogatás az IIS 10.0 -ban (1709) vagy újabb verziókban), az alkalmazás nem igényli a HSTS köztes szoftver használatát. További információ: HTTPS/HSTS letiltása a projektlétrehozáskor.

HTTPS átirányítási köztes szoftver (UseHttpsRedirection)

A következő kódhívás a UseHttpsRedirection fájlban található: Program.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Az előző kiemelt kód:

Javasoljuk, hogy ideiglenes átirányításokat használjunk állandó átirányítások helyett. A linkek gyorsítótárazása instabil viselkedést okozhat a fejlesztési környezetekben. Ha inkább állandó átirányítási állapotkódot szeretne küldeni, amikor az alkalmazás nem Development környezetben van, tekintse meg az állandó átirányítások konfigurálása a gyártásban című szakaszt. Javasoljuk, hogy HSTS használatával jelezhesse az ügyfeleknek, hogy csak biztonságos erőforrás-kérelmeket kell küldeni az alkalmazásnak (csak éles környezetben).

Note

Ne keverje össze a konfigurációs kulcsot és a HTTPS_PORT környezeti változót, amely a HTTPS átirányítási köztes szoftver portját állítja be a konfigurációs kulccsal és ASPNETCORE_HTTPS_PORTS a HTTPS_PORTS környezeti változóval, amely beállítja a portokat a /HTTP.sys végpontkonfigurációhozKestrel.ASPNETCORE_HTTPS_PORT

Portkonfiguráció

A köztes szoftvernek elérhetőnek kell lennie egy portnak ahhoz, hogy egy nem biztonságos kérést átirányítson a HTTPS-be. Ha nincs elérhető port:

  • A HTTPS-hez való átirányítás nem történik meg.
  • A köztes szoftver naplózza a következő figyelmeztetést: "Nem sikerült meghatározni a https-portot az átirányításhoz."

Adja meg a HTTPS-portot az alábbi módszerek bármelyikével:

  • Állítsa be a HttpsRedirectionOptions.HttpsPort értékét.

  • Állítsa be a https_portgazdagép beállításait:

    • Gazdagépkonfigurációban.

    • A ASPNETCORE_HTTPS_PORT környezeti változó beállításával.

    • Úgy, hogy hozzáadsz egy legfelső szintű bejegyzést itt: appsettings.json.

      {
        "https_port": 443,
        "Logging": {
          "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
          }
        },
        "AllowedHosts": "*"
      }
      
  • Jelöljön meg egy portot a biztonságos sémával a ASPNETCORE_URLS környezeti változó használatával. A környezeti változó konfigurálja a kiszolgálót. A köztes szoftver közvetetten felderíti a HTTPS-portot a IServerAddressesFeature. Ez a megközelítés nem működik fordított proxytelepítésekben.

  • Az ASP.NET Core-websablonok HTTPS-URL címet állítanak be a Properties/launchsettings.json mind a Kestrel mind az IIS Express számára. launchsettings.json csak a helyi gépen használható.

  • HTTPS URL-végpontot kell konfigurálni a Kestrel kiszolgáló vagy a HTTP.sys kiszolgáló nyilvános elérhetőségű peremhálózati üzembe helyezéséhez. Az alkalmazás csak egy HTTPS-portot használ. A köztes szoftver a portot észleli a következőn keresztül: IServerAddressesFeature.

Note

Ha egy alkalmazás fordított proxykonfigurációban fut, IServerAddressesFeature nem érhető el. Állítsa be a portot az ebben a szakaszban ismertetett egyéb megközelítések egyikével.

Peremtelepítések

Amikor Kestrel vagy HTTP.sys nyilvános elérésű edge szerverként van használva, akkor Kestrel vagy HTTP.sys úgy kell konfigurálni, hogy mindkettőt figyelje.

  • A biztonságos port, amelyre az ügyfél át van irányítva (általában a 443-as port az éles környezetben, és az 5001-es a fejlesztési környezetben).
  • A nem biztonságos port (általában 80 éles környezetben és 5000 fejlesztési környezetben).

A nem biztonságos portot az ügyfélnek el kell érnie ahhoz, hogy az alkalmazás nem biztonságos kérést kapjon, és átirányíthassa az ügyfelet a biztonságos portra.

További információ: Kestrel végpontkonfiguráció vagy HTTP.sys webkiszolgáló implementálása a ASP.NET Core-ban.

Üzembe helyezési forgatókönyvek

Az ügyfél és a kiszolgáló közötti tűzfalnak nyitva kell lennie a forgalom számára nyitva lévő kommunikációs portokkal is.

Ha a kérések továbbítása fordított proxykonfigurációban történik, használja a továbbított fejlécek köztes szoftverét , mielőtt meghívja a HTTPS-átirányítási köztes szoftvereket. A továbbított fejlécek köztes rétege a Request.Scheme fejléc használatával frissíti a X-Forwarded-Proto fejlécet. A köztes szoftver lehetővé teszi az átirányítási URI-k és más biztonsági szabályzatok megfelelő működését. Ha a továbbított fejlécek köztes szoftverkomponenst nem használják, előfordulhat, hogy a háttéralkalmazás nem kapja meg a helyes sémát, emiatt pedig átirányítási hurokba kerül. Gyakori végfelhasználói hibaüzenet, hogy túl sok átirányítás történt.

Az Azure App Service-ben való üzembe helyezéskor kövesse az oktatóanyag útmutatását : Meglévő egyéni SSL-tanúsítvány kötése az Azure Web Appshez.

Beállítások

A köztes szoftver beállításainak konfigurálásához a következő kiemelt kódhívások AddHttpsRedirection :

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddHsts(options =>
{
    options.Preload = true;
    options.IncludeSubDomains = true;
    options.MaxAge = TimeSpan.FromDays(60);
    options.ExcludedHosts.Add("example.com");
    options.ExcludedHosts.Add("www.example.com");
});

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = Status307TemporaryRedirect;
    options.HttpsPort = 5001;
});

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

A hívás AddHttpsRedirection csak az értékek HttpsPortRedirectStatusCodemódosításához szükséges.

Az előző kiemelt kód:

Állandó átirányítások konfigurálása éles környezetben

A köztes szoftver alapértelmezésként egy Status307TemporaryRedirect küld az összes átirányításnál. Ha az állandó átirányítási állapotkódot szeretné küldeni, amikor az alkalmazás nem környezetiDevelopment állapotban van, csomagolja be a köztes szoftver beállításainak konfigurációját egy feltételes ellenőrzésbe, amely nem környezetiDevelopment állapotot tartalmaz.

Szolgáltatások konfigurálásakor a következő helyen Program.cs:

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

if (!builder.Environment.IsDevelopment())
{
    builder.Services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = Status308PermanentRedirect;
        options.HttpsPort = 443;
    });
}

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");

    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

HTTPS-átirányítási köztes szoftver alternatív megközelítése

A HTTPS-átirányításra szolgáló köztes réteg (UseHttpsRedirection) használatának egyik alternatívája az URL-újraírásra szolgáló köztes réteg (AddRedirectToHttps) használata. AddRedirectToHttps az átirányítás végrehajtásakor az állapotkódot és a portot is beállíthatja. További információkért lásd: URL-átíró köztes szoftver.

Ha a HTTPS-hez a további átirányítási szabályok megkövetelése nélkül irányít át, javasoljuk, hogy a jelen cikkben ismertetett HTTPS-átirányítási köztes szoftver (UseHttpsRedirection) használatát használja.

HTTP Strict Transport Security (HSTS) protokoll

Az OWASP szerint a HTTP Strict Transport Security (HSTS) egy válaszfejlécen keresztül megadott, opt-in biztonsági fejlesztés, amelyet a webalkalmazás kínál. Ha a HSTS-t támogató böngésző a következő fejlécet kapja:

  • A böngésző tárolja a tartomány konfigurációját, amely megakadályozza a HTTP-en keresztüli kommunikáció küldését. A böngésző minden kommunikációt HTTPS-en keresztül kényszerít.
  • A böngésző megakadályozza, hogy a felhasználó nem megbízható vagy érvénytelen tanúsítványokat használ. A böngésző letiltja azokat a kéréseket, amelyek lehetővé teszik a felhasználó számára, hogy ideiglenesen megbízzanak egy ilyen tanúsítványban.

Mivel a HSTS-t az ügyfél kényszeríti ki, bizonyos korlátozásokkal rendelkezik:

  • Az ügyfélnek támogatnia kell a HSTS-t.
  • A HSTS legalább egy sikeres HTTPS-kérést igényel a HSTS-szabályzat létrehozásához.
  • Az alkalmazásnak minden HTTP-kérést ellenőriznie kell, és át kell irányítania vagy el kell utasítania a HTTP-kérést.

ASP.NET Core a HSTS-t bővítménymetódussal UseHsts implementálja. Az alábbi kódhívások UseHsts , ha az alkalmazás nincs fejlesztési módban:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

UseHsts nem ajánlott a fejlesztés során, mert a HSTS-beállításokat a böngészők könnyen gyorsítótárazhatják. Alapértelmezés szerint UseHsts kizárja a helyi visszacsatolási címet.

A HTTPS-t első alkalommal implementáló éles környezetekben állítsa a kezdeti HstsOptions.MaxAge értéket egy kis értékre az TimeSpan egyik metódus használatával. Állítsa be az értéket úgy, hogy órák helyett legfeljebb egy nap legyen, arra az esetre, ha vissza kell állítania a HTTPS-infrastruktúrát HTTP-re. Miután biztos a HTTPS-konfiguráció fenntarthatóságában, növelje a HSTS-értéket max-age ; a gyakran használt érték egy év.

A következő kiemelt kód:

using static Microsoft.AspNetCore.Http.StatusCodes;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.AddHsts(options =>
{
    options.Preload = true;
    options.IncludeSubDomains = true;
    options.MaxAge = TimeSpan.FromDays(60);
    options.ExcludedHosts.Add("example.com");
    options.ExcludedHosts.Add("www.example.com");
});

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = Status307TemporaryRedirect;
    options.HttpsPort = 5001;
});

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();
  • Beállítja a Strict-Transport-Security fejléc előbetöltési paraméterét. Az előzetes adatbetöltés nem része az RFC HSTS-specifikációnak, de a webböngészők támogatják a HSTS-webhelyek új telepítésre való előzetes betöltését. További információért lásd https://hstspreload.org/.
  • Engedélyezi az includeSubDomain beállítást, amely a HSTS-szabályzatot alkalmazza a Host altartományaira.
  • Az max-age fejléc Strict-Transport-Security paraméterét explicit módon 60 napra állítja be. Ha nincs beállítva, az alapértelmezett érték 30 nap. További információt a maximális életkorról szóló irányelvben talál.
  • A example.com elemet hozzáadja a kizárandó gazdagépek listájához.

UseHsts kizárja a következő visszacsatolási gazdagépeket:

  • localhost : Az IPv4 visszacsatolási címe.
  • 127.0.0.1 : Az IPv4 visszacsatolási címe.
  • [::1] : Az IPv6 visszacsatolási címe.

A HTTPS/HSTS letiltása projektlétrehozáskor

Bizonyos háttérszolgáltatás-forgatókönyvekben, ahol a kapcsolatbiztonság a hálózat nyilvános elérésű peremhálózatán van kezelve, nincs szükség a kapcsolatbiztonság konfigurálására az egyes csomópontokon. A Visual Studio sablonjaiból vagy a dotnet új parancsából létrehozott webalkalmazások engedélyezik a HTTPS-átirányítást és a HSTS-t. Az olyan üzemelő példányok esetében, amelyek nem igénylik ezeket a forgatókönyveket, kikapcsolhatja a HTTPS/HSTS szolgáltatást, ha az alkalmazás a sablonból jön létre.

A HTTPS/HSTS letiltása:

Törölje a jelölést a HTTPS konfigurálás jelölőnégyzetből.

Új ASP.NET Core webalkalmazás párbeszédpanel, amelyen a Https-konfigurálás jelölőnégyzet nincs bejelölve.

A ASP.NET Core HTTPS fejlesztési tanúsítvány megbízhatósága Windows és macOS rendszeren

A Firefox böngészőben lásd a következő szakaszt.

A .NET SDK https fejlesztési tanúsítványt tartalmaz. A tanúsítvány az első futtatás során települ. Például dotnet --info a következő kimenet egy változata jelenik meg:

ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.

A .NET SDK telepítése telepíti a ASP.NET Core HTTPS fejlesztési tanúsítványt a helyi felhasználói tanúsítványtárolóba. A tanúsítvány telepítve van, de nem megbízható. A tanúsítvány megbízhatóságához hajtsa végre az eszköz futtatásához dotnet dev-certs szükséges egyszeri lépést:

dotnet dev-certs https --trust

Az alábbi parancs segítséget nyújt az dotnet dev-certs eszközről:

dotnet dev-certs https --help

Warning

Ne hozzon létre fejlesztési tanúsítványt olyan környezetben, amely újraterjesztésre kerül, például tárolólemezképet vagy virtuális gépet. Ez hamisításhoz és jogosultságszint-emeléséhez vezethet. Ennek elkerülése érdekében állítsa a DOTNET_GENERATE_ASPNET_CERTIFICATE környezeti változót false a .NET CLI első meghívása előtt. Ez kihagyja a ASP.NET Core fejlesztési tanúsítvány automatikus létrehozását a parancssori felület első futtatása során.

Bízzon a HTTPS-tanúsítványban a Firefoxban a SEC_ERROR_INADEQUATE_KEY_USAGE hiba elkerülése érdekében

A Firefox böngésző saját tanúsítványtárolót használ, ezért nem bízik az IIS Express vagy Kestrel a fejlesztői tanúsítványokban.

A HTTPS-tanúsítványnak a Firefoxban való megbízhatóságára, szabályzatfájl létrehozására vagy a FireFox böngészővel való konfigurálására két módszer létezik. A böngészővel való konfigurálás létrehozza a szabályzatfájlt, így a két módszer egyenértékű.

Szabályzatfájl létrehozása HTTPS-tanúsítvány megbízhatóságához a Firefoxban

Hozzon létre egy szabályzatfájlt (policies.json) a következő helyen:

Adja hozzá a következő JSON-t a Firefox-házirendfájlhoz:

{
  "policies": {
    "Certificates": {
      "ImportEnterpriseRoots": true
    }
  }
}

Az előző szabályzatfájl a Windows tanúsítványtárolójában található megbízható tanúsítványokból származó Firefox megbízhatósági tanúsítványokat készít. A következő szakasz alternatív módszert kínál az előző szabályzatfájl létrehozásához a Firefox böngészővel.

HTTPS-tanúsítvány megbízhatóságának konfigurálása a Firefox böngészővel

Állítsa be security.enterprise_roots.enabled = true a következő utasítások felhasználásával.

  1. Adja meg about:config a Firefox böngészőben.
  2. Ha elfogadja a kockázatot, válassza a Kockázat elfogadása és a Folytatás lehetőséget.
  3. Válassza az Összes megjelenítése lehetőséget
  4. Beállít security.enterprise_roots.enabled = true
  5. Kilépés és újraindítás a Firefoxból

További információ: Hitelesítésszolgáltatók beállítása a Firefoxban és a mozilla/policy-templates/README fájl.

Fejlesztői tanúsítvány beállítása a Dockerhez

Lásd ezt a GitHub-hibajegyet.

HTTPS-tanúsítvány megbízhatósága Linuxon

A bizalom kiépítése terjesztési és böngészőspecifikus feladat. Az alábbi szakaszok útmutatást nyújtanak néhány népszerű disztribúcióhoz, valamint a Chromium böngészőkhöz (Edge és Chrome) és a Firefoxhoz.

HTTPS-tanúsítvány hitelesítése Linuxon a linux-dev-certs használatával

A linux-dev-certs egy nyílt forráskódú, közösség által támogatott , .NET-alapú globális eszköz, amely kényelmes módot kínál a linuxos fejlesztői tanúsítványok létrehozására és megbízhatóságára. Az eszközt a Microsoft nem tartja karban és nem támogatja.

Az alábbi parancsok telepítik az eszközt, és létrehoznak egy megbízható fejlesztői tanúsítványt:

dotnet tool update -g linux-dev-certs
dotnet linux-dev-certs install

További információkért vagy a problémák jelentéséhez tekintse meg a Linux-dev-certs GitHub-adattárat.

Az Ubuntu megbízik a tanúsítványban a szolgáltatásközi kommunikációhoz

Az alábbi utasítások nem működnek egyes Ubuntu-verziókhoz, például a 20.04-hez. További információ: GitHub-probléma dotnet/AspNetCore.Docs #23686.

  1. Telepítse az OpenSSL 1.1.1h vagy újabb verzióját. Az OpenSSL frissítésére vonatkozó útmutatásért tekintse meg a disztribúciót.

  2. Futtassa az alábbi parancsot:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    sudo update-ca-certificates
    

Az előző parancsok:

  • Győződjön meg arról, hogy az aktuális felhasználó fejlesztői tanúsítványa létrejött.
  • Exportálja a mappához ca-certificates szükséges emelt szintű engedélyekkel rendelkező tanúsítványt az aktuális felhasználó környezetének használatával.
  • A -E jelző eltávolítása exportálja a fő felhasználói tanúsítványt, és szükség esetén létrehozza. Minden újonnan létrehozott tanúsítvány más ujjlenyomattal rendelkezik. Ha gyökérként fut, sudo és -E nincs rá szükség.

Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

HTTPS-tanúsítvány megbízhatósága Linuxon az Edge vagy a Chrome használatával

Linuxon futó chromium böngészők esetén:

  • Telepítse a libnss3-tools-t a disztribúciójához.

  • Hozza létre vagy ellenőrizze, hogy a $HOME/.pki/nssdb mappa létezik-e a gépen.

  • Exportálja a tanúsítványt a következő paranccsal:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

  • Futtassa az alábbi parancsot:

    certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crt
    
  • Lépjen ki, és indítsa újra a böngészőt.

A tanúsítvány megbízhatósága a Linuxon futó Firefoxban

  • Exportálja a tanúsítványt a következő paranccsal:

    dotnet dev-certs https
    sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    Az előző parancs elérési útja az Ubuntura vonatkozik. Más disztribúciók esetén válassza ki a megfelelő elérési utat, vagy használja a hitelesítésszolgáltatók elérési útját.

  • Hozzon létre egy JSON-fájlt /usr/lib/firefox/distribution/policies.json a következő paranccsal:

cat <<EOF | sudo tee /usr/lib/firefox/distribution/policies.json
{
    "policies": {
        "Certificates": {
            "Install": [
                "/usr/local/share/ca-certificates/aspnet/https.crt"
            ]
        }
    }
}
EOF

Megjegyzés: Az Ubuntu 21.10 Firefox snap csomagként érkezik, és a telepítési mappa /snap/firefox/current/usr/lib/firefox.

A szabályzatfájl böngészővel történő konfigurálásának alternatív módjáról ebben a cikkben a HTTPS-tanúsítvány megbízhatóságának konfigurálása a Firefox böngészővel című témakörben olvashat.

A tanúsítvány megbízhatósága a Fedora 34 használatával

See:

Bízzon a tanúsítványban más disztribúciókkal

Lásd ezt a GitHub-hibajegyet.

HTTPS-tanúsítvány megbízhatósága Linux rendszerhez készült Windows-alrendszerből

Az alábbi utasítások nem működnek egyes Linux-disztribúciók esetében, például az Ubuntu 20.04-ben. További információ: GitHub-probléma dotnet/AspNetCore.Docs #23686.

A Linux windowsos alrendszere (WSL) létrehoz egy HTTPS önaláírt fejlesztési tanúsítványt, amely alapértelmezés szerint nem megbízható a Windowsban. A windowsos WSL-tanúsítvány megbízhatóságának legegyszerűbb módja, ha úgy konfigurálja a WSL-t, hogy ugyanazt a tanúsítványt használja, mint a Windows:

  • Windows rendszeren exportálja a fejlesztői tanúsítványt egy fájlba:

    dotnet dev-certs https -ep https.pfx -p $CREDENTIAL_PLACEHOLDER$ --trust
    

    Hol $CREDENTIAL_PLACEHOLDER$ található a jelszó?

  • Egy WSL-ablakban importálja az exportált tanúsítványt a WSL-példányon:

    dotnet dev-certs https --clean --import <<path-to-pfx>> --password $CREDENTIAL_PLACEHOLDER$
    

Az előző módszer tanúsítványonként és WSL-eloszlásonként egyszeri művelet. Egyszerűbb, mint a tanúsítvány újra és újra exportálása. Ha windows rendszeren frissíti vagy újragenerálja a tanúsítványt, előfordulhat, hogy újra kell futtatnia az előző parancsokat.

A tanúsítványokkal kapcsolatos problémák, például a nem megbízható tanúsítványok hibaelhárítása

Ez a szakasz segítséget nyújt a ASP.NET Core HTTPS-fejlesztési tanúsítvány telepítésekor és megbízhatóságában, de böngészőbeli figyelmeztetések vannak arról, hogy a tanúsítvány nem megbízható. A ASP.NET Core HTTPS fejlesztési tanúsítványt használja a Kestrelrendszer.

Az IIS Express-tanúsítvány javításához tekintse meg ezt a Stackoverflow-problémát .

Minden platform – a tanúsítvány nem megbízható

Futtassa az alábbi parancsot:

dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazás számára. A tanúsítványmegbízhatóságot a böngészők gyorsítótárazják.

dotnet dev-certs https --clean sikertelen

Az előző parancsok a böngésző megbízhatóságával kapcsolatos legtöbb problémát megoldják. Ha a böngésző továbbra sem bízik a tanúsítványban, kövesse az alábbi platformspecifikus javaslatokat.

Docker – a tanúsítvány nem megbízható

  • Törölje a C:\Users{USER}\AppData\Roaming\ASP.NET\Https mappát.
  • Tisztítsa meg az oldatot. Törölje a tároló, a és a obj, valamint a mappákat.
  • Indítsa újra a fejlesztőeszközt. Például a Visual Studio vagy a Visual Studio Code.

Windows – a tanúsítvány nem megbízható

  • Ellenőrizze a tanúsítványtárolóban található tanúsítványokat. Egy localhost tanúsítványnak kell lennie ASP.NET Core HTTPS development certificate barátságos névvel, mind Current User > Personal > Certificates mind Current User > Trusted root certification authorities > Certificates alatt.
  • Távolítsa el az összes talált tanúsítványt mind a személyes, mind a megbízható legfelső szintű hitelesítésszolgáltatóktól. Ne távolítsa el az IIS Express localhost tanúsítványt.
  • Futtassa az alábbi parancsot:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazás számára.

OS X – a tanúsítvány nem megbízható

  • Nyissa meg a KeyChain Accesst.
  • Válassza ki a rendszerkulcsláncot.
  • Ellenőrizze, hogy van-e localhost-tanúsítvány.
  • Ellenőrizze, hogy tartalmaz-e szimbólumot + az ikonon, hogy az az összes felhasználó számára megbízható-e.
  • Távolítsa el a tanúsítványt a rendszerkulcsláncból.
  • Futtassa az alábbi parancsot:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zárja be a megnyitott böngészőpéldányokat. Nyisson meg egy új böngészőablakot az alkalmazás számára.

A Visual Studióval kapcsolatos tanúsítványproblémák elhárításához lásd: HTTPS-hiba az IIS Express használatával (dotnet/AspNetCore #16892).

A Linux-tanúsítvány nem megbízható

Ellenőrizze, hogy a megbízhatóságra konfigurált tanúsítvány a kiszolgáló által Kestrel használt felhasználói HTTPS fejlesztői tanúsítvány-e.

Ellenőrizze az aktuális felhasználó alapértelmezett HTTPS fejlesztői Kestrel tanúsítványát a következő helyen:

ls -la ~/.dotnet/corefx/cryptography/x509stores/my

A HTTPS fejlesztői Kestrel tanúsítványfájl az SHA1 lenyomatát tartalmazza. A fájl törlésekor a dotnet dev-certs https --clean rendszeren keresztül, szükség esetén, egy másik ujjlenyomattal újragenerálódik. Ellenőrizze az exportált tanúsítvány ujjlenyomatát az alábbi paranccsal:

openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crt

Ha a tanúsítvány nem egyezik, az a következők egyike lehet:

  • Egy régi tanúsítvány.
  • Exportált egy fejlesztői tanúsítványt a legfelső szintű felhasználó számára. Ebben az esetben exportálja a tanúsítványt.

A legfelső szintű felhasználói tanúsítvány a következő helyen ellenőrizhető:

ls -la /root/.dotnet/corefx/cryptography/x509stores/my

A Visual Studióval használt IIS Express SSL-tanúsítvány

Az IIS Express-tanúsítvánnyal kapcsolatos problémák megoldásához válassza a Visual Studio telepítőjének Javítás elemét. További információkért tekintse meg ezt a GitHub-problémát.

A csoportházirend megakadályozza az önaláírt tanúsítványok megbízhatóságát

Bizonyos esetekben a csoportházirend megakadályozhatja az önaláírt tanúsítványok megbízhatóságát. További információkért tekintse meg ezt a GitHub-problémát.

További információk