Sicherheitsaspekte in gRPC für ASP.NET Core

Von James Newton-King

Dieser Artikel enthält Informationen zum Sichern von gRPC mit .NET Core

Transportsicherheit

GRPC-Nachrichten werden über HTTP/2 gesendet und empfangen. Es wird Folgendes empfohlen:

  • Transport Layer Security (TLS) wird verwendet, um Nachrichten in gRPC-Produktions-Apps zu sichern.
  • GRPC-Dienste dürfen nur über gesicherte Ports lauschen und reagieren.

TLS wird in Kestrel konfiguriert. Weitere Informationen zur Kestrel-Endpunktkonfiguration finden Sie unter Kestrel-Endpunktkonfiguration.

TLS wird in Kestrel konfiguriert. Weitere Informationen zur Kestrel-Endpunktkonfiguration finden Sie unter Kestrel-Endpunktkonfiguration.

Ein TLS-Beendigungsproxy kann mit TLS kombiniert werden. Die Vorteile der Verwendung der TLS-Beendigung und die Sicherheitsrisiken des Sendens unsicherer HTTP-Anforderungen zwischen Apps im privaten Netzwerk sollten gegeneinander abgewogen werden.

Ausnahmen

Ausnahmemeldungen werden generell als vertrauliche Daten angesehen, die nicht für einen Client offengelegt werden dürfen. Standardmäßig sendet gRPC keine Details einer von einem gRPC-Dienst ausgelösten Ausnahme an den Client. Stattdessen erhält der Client eine generische Nachricht, die angibt, dass ein Fehler aufgetreten ist. Ausnahmemeldungen, die an den Client übermittelt werden, können mithilfe von EnableDetailedErrors überschrieben werden (zum Beispiel während der Entwicklung oder eines Tests). Ausnahmemeldungen dürfen dem Client in Produktions-Apps nicht offengelegt werden.

Beschränkungen der Nachrichtengröße

Eingehende Nachrichten an gRPC-Clients und -Dienste werden in den Speicher geladen. Die Größenbeschränkung für Nachrichten sind Mechanismen, um zu verhindern, dass gRPC übermäßig viele Ressourcen beansprucht.

GRPC verwendet Größenbeschränkungen pro Nachricht, um eingehende und ausgehende Nachrichten zu verwalten. Standardmäßig beschränkt gRPC die eingehenden Nachrichten auf 4 MB. Für ausgehende Nachrichten gibt es keine Beschränkung.

Auf dem Server können gRPC-Nachrichtengrenzwerte für alle Dienste in einer App mit AddGrpc konfiguriert werden:

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

Beschränkungen können auch für einen einzelnen Dienst mit AddServiceOptions<TService> konfiguriert werden. Weitere Informationen zur Konfiguration von Beschränkungen der Nachrichtengröße finden Sie unter gRPC-Konfiguration.

Clientzertifikatüberprüfung

Clientzertifikate werden zunächst überprüft, wenn die Verbindung hergestellt wird. Standardmäßig führt Kestrel keine zusätzliche Überprüfung des Clientzertifikats einer Verbindung durch.

Es wird empfohlen, dass gRPC-Dienste von Clientzertifikaten über das Paket Microsoft.AspNetCore.Authentication.Certificate gesichert werden. Die Authentifizierung der ASP.NET Core-Zertifizierung führt zusätzliche Überprüfungen auf einem Clientzertifikat aus, einschließlich der folgenden:

  • Zertifikat verfügt über gültige erweiterte Schlüsselverwendung (EKU)
  • Befindet sich innerhalb des Gültigkeitszeitraums
  • Zertifikatswiderruf wird überprüft