Sicherheitsaspekte in gRPC für ASP.NET Core
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der .NET- und .NET Core-Supportrichtlinie. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
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