Delen via


Beveiligingsoverwegingen in gRPC voor ASP.NET Core

Note

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.

Warning

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.

Important

Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.

Zie de .NET 9-versie van dit artikel voor de huidige release.

Door James Newton-King

Dit artikel bevat informatie over het beveiligen van gRPC met .NET.

Transport security

gRPC-berichten worden verzonden en ontvangen met behulp van HTTP/2. We recommend:

  • Transport Layer Security (TLS) wordt gebruikt voor het beveiligen van berichten in gRPC-apps voor productie.
  • gRPC-services mogen alleen luisteren en reageren via beveiligde poorten.

TLS is geconfigureerd in Kestrel. Zie de eindpuntconfiguratie voor meer informatie over het configureren van Kestrel eindpuntenKestrel.

TLS is geconfigureerd in Kestrel. Zie de eindpuntconfiguratie voor meer informatie over het configureren van Kestrel eindpuntenKestrel.

Een TLS-beëindigingsproxy kan worden gecombineerd met TLS. De voordelen van het gebruik van TLS-beëindiging moeten worden overwogen tegen de beveiligingsrisico's van het verzenden van onbeveiligde HTTP-aanvragen tussen apps in het privénetwerk.

Exceptions

Uitzonderingsberichten worden over het algemeen beschouwd als gevoelige gegevens die niet aan een client moeten worden onthuld. GRPC verzendt standaard niet de details van een uitzondering die wordt gegenereerd door een gRPC-service naar de client. In plaats daarvan ontvangt de client een algemeen bericht dat aangeeft dat er een fout is opgetreden. Het verzenden van uitzonderingsberichten naar de client kan worden aangepast (bijvoorbeeld in ontwikkeling of test) met EnableDetailedErrors. Uitzonderingsberichten mogen niet zichtbaar zijn voor de client in productie-apps.

Limieten voor berichtgrootte

Binnenkomende berichten naar gRPC-clients en -services worden in het geheugen geladen. Berichtgroottelimieten zijn een mechanisme om te voorkomen dat gRPC overmatige resources verbruikt.

gRPC gebruikt limieten per berichtgrootte om binnenkomende en uitgaande berichten te beheren. GRPC beperkt standaard binnenkomende berichten tot 4 MB. Er geldt geen limiet voor uitgaande berichten.

Op de server kunnen gRPC-berichtlimieten worden geconfigureerd voor alle services in een app met AddGrpc:

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

Limieten kunnen ook worden geconfigureerd voor een afzonderlijke service met behulp van AddServiceOptions<TService>. Zie gRPC-configuratie voor meer informatie over het configureren van berichtgroottelimieten.

Validatie van clientcertificaat

Clientcertificaten worden in eerste instantie gevalideerd wanneer de verbinding tot stand is gebracht. Kestrel Standaard wordt geen extra validatie uitgevoerd van het clientcertificaat van een verbinding.

We raden u aan om gRPC-services die worden beveiligd door clientcertificaten, het pakket Microsoft.AspNetCore.Authentication.Certificate te gebruiken. ASP.NET Basiscertificeringsverificatie voert extra validatie uit op een clientcertificaat, waaronder:

  • Certificaat heeft een geldig gebruik van uitgebreide sleutels (EKU)
  • Valt binnen de geldigheidsperiode
  • Certificaatintrekking controleren