Zagadnienia dotyczące zabezpieczeń w usłudze gRPC dla platformy ASP.NET Core
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Autor: James Newton-King
Ten artykuł zawiera informacje na temat zabezpieczania gRPC za pomocą platformy .NET Core.
Zabezpieczenia transportu
Komunikaty gRPC są wysyłane i odbierane przy użyciu protokołu HTTP/2. Zalecamy:
- Protokół Transport Layer Security (TLS) służy do zabezpieczania komunikatów w produkcyjnych aplikacjach gRPC.
- Usługi gRPC powinny nasłuchiwać i reagować tylko na zabezpieczone porty.
Protokół TLS jest skonfigurowany w programie Kestrel. Aby uzyskać więcej informacji na temat konfigurowania Kestrel punktów końcowych, zobacz Kestrel Konfiguracja punktu końcowego.
Protokół TLS jest skonfigurowany w programie Kestrel. Aby uzyskać więcej informacji na temat konfigurowania Kestrel punktów końcowych, zobacz Kestrel Konfiguracja punktu końcowego.
Serwer proxy zakończenia protokołu TLS można połączyć z protokołem TLS. Korzyści wynikające z kończenia żądań PROTOKOŁU TLS należy wziąć pod uwagę w odniesieniu do zagrożeń bezpieczeństwa związanych z wysyłaniem niezabezpieczonych żądań HTTP między aplikacjami w sieci prywatnej.
Wyjątki
Komunikaty o wyjątkach są zwykle uznawane za poufne dane, które nie powinny być ujawniane klientowi. Domyślnie gRPC nie wysyła szczegółów wyjątku zgłaszanego przez usługę gRPC do klienta. Zamiast tego klient otrzymuje ogólny komunikat wskazujący, że wystąpił błąd. Dostarczanie komunikatów o wyjątku do klienta może zostać zastąpione (na przykład w środowisku projektowym lub testowym) za pomocą polecenia EnableDetailedErrors. Komunikaty o wyjątkach nie powinny być widoczne dla klienta w aplikacjach produkcyjnych.
Limity rozmiaru komunikatów
Przychodzące komunikaty do klientów i usług gRPC są ładowane do pamięci. Limity rozmiaru komunikatów to mechanizm, który zapobiega nadmiernemu używaniu zasobów przez gRPC.
Usługa gRPC używa limitów rozmiaru poszczególnych komunikatów do zarządzania przychodzącymi i wychodzącymi komunikatami. Domyślnie gRPC ogranicza komunikaty przychodzące do 4 MB. Brak limitu dla komunikatów wychodzących.
Na serwerze można skonfigurować limity komunikatów gRPC dla wszystkich usług w aplikacji za pomocą polecenia AddGrpc
:
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(options =>
{
options.MaxReceiveMessageSize = 1 * 1024 * 1024; // 1 MB
options.MaxSendMessageSize = 1 * 1024 * 1024; // 1 MB
});
}
Limity można również skonfigurować dla pojedynczej usługi przy użyciu polecenia AddServiceOptions<TService>
. Aby uzyskać więcej informacji na temat konfigurowania limitów rozmiaru komunikatów, zobacz konfiguracja gRPC.
Walidacja certyfikatu klienta
Certyfikaty klienta są początkowo weryfikowane podczas nawiązywania połączenia. Domyślnie Kestrel nie wykonuje dodatkowej weryfikacji certyfikatu klienta połączenia.
Zalecamy, aby usługi gRPC zabezpieczone przez certyfikaty klienta używały pakietu Microsoft.AspNetCore.Authentication.Certificate . ASP.NET Core uwierzytelnianie certyfikacji przeprowadzi dodatkową walidację certyfikatu klienta, w tym:
- Certyfikat ma prawidłowe rozszerzone użycie klucza (EKU)
- Znajduje się w okresie ważności
- Sprawdzanie odwołania certyfikatów