Consideraciones de seguridad en gRPC para ASP.NET Core
Nota:
Esta no es la versión más reciente de este artículo. Para la versión actual, consulte la versión .NET 8 de este artículo.
Advertencia
Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulte la Directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulte la versión .NET 8 de este artículo.
Importante
Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.
Para la versión actual, consulte la versión .NET 8 de este artículo.
En este artículo se proporciona información sobre cómo proteger gRPC con .NET Core.
Seguridad de transporte
Los mensajes gRPC se envían y se reciben mediante HTTP/2. Es recomendable que:
- Se use Seguridad de la capa de transporte (TLS) para proteger los mensajes en aplicaciones gRPC de producción.
- Los servicios gRPC solo deben escuchar y responder a través de puertos seguros.
TLS se configura en Kestrel. Para obtener más información sobre cómo configurar puntos de conexión de Kestrel, vea Configuración de puntos de conexión de Kestrel.
TLS se configura en Kestrel. Para obtener más información sobre cómo configurar puntos de conexión de Kestrel, vea Configuración de puntos de conexión de Kestrel.
Un proxy de terminación TLS se puede combinar con TLS. Las ventajas de usar la terminación TLS deben tenerse en cuenta en los riesgos de seguridad de enviar solicitudes HTTP no seguras entre aplicaciones en la red privada.
Excepciones
Los mensajes de excepción generalmente se consideran datos confidenciales que no se deben revelar a un cliente. De forma predeterminada, gRPC no envía al cliente los detalles de una excepción iniciada por un servicio gRPC. En su lugar, el cliente recibe un mensaje genérico en el que se indica que se ha producido un error. La entrega de mensajes de excepción al cliente se puede invalidar (por ejemplo, en desarrollo o prueba) con EnableDetailedErrors. Los mensajes de excepción no se deben exponer al cliente en las aplicaciones de producción.
Límites de tamaño de los mensajes
Los mensajes entrantes a los clientes y servicios gRPC se cargan en la memoria. Los límites de tamaño de los mensajes son un mecanismo que ayuda a evitar que gRPC consuma demasiados recursos.
gRPC usa los límites de tamaño por mensaje para administrar los mensajes entrantes y salientes. De forma predeterminada, gRPC limita los mensajes entrantes a 4 MB. No hay ningún límite para los mensajes salientes.
En el servidor, los límites de los mensajes de gRPC se pueden configurar para todos los servicios de una aplicación con AddGrpc
:
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(options =>
{
options.MaxReceiveMessageSize = 1 * 1024 * 1024; // 1 MB
options.MaxSendMessageSize = 1 * 1024 * 1024; // 1 MB
});
}
Los límites también se pueden configurar para un servicio individual mediante AddServiceOptions<TService>
. Para obtener más información sobre cómo configurar los límites de tamaño de los mensajes, vea Configuración de gRPC.
Validación de certificados de cliente
Los certificados de cliente se validan inicialmente cuando se establece la conexión. De forma predeterminada, Kestrel no realiza ninguna validación adicional del certificado de cliente de una conexión.
Se recomienda que los servicios gRPC protegidos por certificados de cliente usen el paquete Microsoft.AspNetCore.Authentication.Certificate. La autenticación de certificación de ASP.NET Core realizará una validación adicional en un certificado de cliente, lo que incluye lo siguiente:
- El certificado tiene un uso mejorado de clave (EKU) válido.
- Está dentro de su período de validez.
- Se comprueba la revocación de certificados.