Zagadnienia dotyczące zabezpieczeń w usłudze gRPC dla platformy ASP.NET Core

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ół 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