Dela via


Säkerhetsöverväganden i gRPC för ASP.NET Core

Note

Det här är inte den senaste versionen av den här artikeln. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Warning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Important

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Av James Newton-King

Den här artikeln innehåller information om hur du skyddar gRPC med .NET.

Transport security

gRPC-meddelanden skickas och tas emot med HTTP/2. We recommend:

  • TLS (Transport Layer Security) används för att skydda meddelanden i GRPC-appar för produktion.
  • gRPC-tjänster bör bara lyssna och svara via skyddade portar.

TLS har konfigurerats i Kestrel. Mer information om hur du konfigurerar slutpunkter finns i Kestrel av slutpunkter.

TLS har konfigurerats i Kestrel. Mer information om hur du konfigurerar slutpunkter finns i Kestrel av slutpunkter.

En TLS-avslutningsproxy kan kombineras med TLS. Fördelarna med att använda TLS-avslutning bör beaktas mot säkerhetsriskerna med att skicka oskyddade HTTP-begäranden mellan appar i det privata nätverket.

Exceptions

Undantagsmeddelanden betraktas vanligtvis som känsliga data som inte ska visas för en klient. Som standard skickar gRPC inte information om ett undantag som genereras av en gRPC-tjänst till klienten. I stället får klienten ett allmänt meddelande som anger att ett fel har uppstått. Undantagsmeddelandeleverans till klienten kan åsidosättas (till exempel under utveckling eller test) med EnableDetailedErrors. Undantagsmeddelanden ska inte exponeras för klienten i produktionsappar.

Storleksgränser för meddelanden

Inkommande meddelanden till gRPC-klienter och -tjänster läses in i minnet. Storleksbegränsningar för meddelanden är en mekanism för att förhindra att gRPC förbrukar överdrivna resurser.

gRPC använder storleksgränser per meddelande för att hantera inkommande och utgående meddelanden. Som standard begränsar gRPC inkommande meddelanden till 4 MB. Det finns ingen gräns för utgående meddelanden.

På servern kan gRPC-meddelandegränser konfigureras för alla tjänster i en app med AddGrpc:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.MaxReceiveMessageSize = 1 * 1024 * 1024; // 1 MB
        options.MaxSendMessageSize = 1 * 1024 * 1024; // 1 MB
    });
}

Gränser kan också konfigureras för en enskild tjänst med hjälp av AddServiceOptions<TService>. Mer information om hur du konfigurerar storleksbegränsningar för meddelanden finns i gRPC-konfiguration.

Verifiering av klientcertifikat

Klientcertifikat verifieras initialt när anslutningen upprättas. Utför som standard Kestrel inte ytterligare verifiering av en anslutnings klientcertifikat.

Vi rekommenderar att gRPC-tjänster som skyddas av klientcertifikat använder paketet Microsoft.AspNetCore.Authentication.Certificate . ASP.NET Core-certifieringsautentisering utför ytterligare validering på ett klientcertifikat, inklusive:

  • Certifikatet har en giltig utökad nyckelanvändning (EKU)
  • Är inom dess giltighetsperiod
  • Kontrollera återkallande av certifikat