Aracılığıyla paylaş


ASP.NET Core için gRPC'de güvenlik konuları

Yayınlayan James Newton-King

Bu makalede gRPC'yi .NET Core ile güvenli hale getirme hakkında bilgi sağlanır.

Taşıma güvenliği

gRPC iletileri HTTP/2 kullanılarak gönderilir ve alınır. Şunları öneririz:

  • Aktarım Katmanı Güvenliği (TLS), üretim gRPC uygulamalarında iletilerin güvenliğini sağlamak için kullanılır.
  • gRPC hizmetleri yalnızca güvenli bağlantı noktaları üzerinden dinlemeli ve yanıt vermelidir.

TLS içinde Kestrelyapılandırılır. Uç noktaları yapılandırma Kestrel hakkında daha fazla bilgi için bkz Kestrel . uç nokta yapılandırması.

TLS içinde Kestrelyapılandırılır. Uç noktaları yapılandırma Kestrel hakkında daha fazla bilgi için bkz Kestrel . uç nokta yapılandırması.

TLS sonlandırma proxy'si TLS ile birleştirilebilir. TLS sonlandırma kullanmanın avantajları, özel ağdaki uygulamalar arasında güvenli olmayan HTTP istekleri göndermenin güvenlik risklerine karşı değerlendirilmelidir.

Özel durumlar

Özel durum iletileri genellikle istemciye açılmaması gereken hassas veriler olarak kabul edilir. Varsayılan olarak gRPC, bir gRPC hizmeti tarafından oluşan özel durumun ayrıntılarını istemciye göndermez. Bunun yerine, istemci bir hata oluştuğunu belirten genel bir ileti alır. İstemciye özel durum iletisi teslimi EnableDetailedErrors ile geçersiz kılınabilir (örneğin, geliştirme veya testte). Özel durum iletilerinin üretim uygulamalarında istemciye sunulmaması gerekir.

İleti boyutu sınırları

gRPC istemcilerine ve hizmetlerine gelen iletiler belleğe yüklenir. İleti boyutu sınırları, gRPC'nin aşırı kaynak kullanmasını önlemeye yardımcı olan bir mekanizmadır.

gRPC, gelen ve giden iletileri yönetmek için ileti başına boyut sınırları kullanır. Varsayılan olarak, gRPC gelen iletileri 4 MB ile sınırlar. Giden iletilerde sınır yoktur.

Sunucuda, gRPC ileti sınırları ile AddGrpcbir uygulamadaki tüm hizmetler için yapılandırılabilir:

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

Sınırlar, kullanılarak AddServiceOptions<TService>tek bir hizmet için de yapılandırılabilir. İleti boyutu sınırlarını yapılandırma hakkında daha fazla bilgi için bkz . gRPC yapılandırması.

İstemci sertifikası doğrulaması

İstemci sertifikaları başlangıçta bağlantı kurulduğunda doğrulanır. Varsayılan olarak, Kestrel bağlantının istemci sertifikası için ek doğrulama gerçekleştirmez.

İstemci sertifikaları tarafından güvenliği sağlanan gRPC hizmetlerinin Microsoft.AspNetCore.Authentication.Certificate paketini kullanmasını öneririz. ASP.NET Core sertifikası kimlik doğrulaması, istemci sertifikasında ek doğrulama gerçekleştirir, örneğin:

  • Sertifikanın geçerli bir genişletilmiş anahtar kullanımı var (EKU)
  • Geçerlilik süresi içindedir
  • Sertifika iptalini denetleme