安全注意事项

ASP.NET Core 中的 gRPC 的安全注意事项

James 牛顿-k

本文提供了有关通过 .NET Core 保护 gRPC 的信息。

传输安全

gRPC 消息使用 HTTP/2 来发送和接收。 建议:

TLS 是在 Kestrel 中配置的。 有关配置 Kestrel 终结点的详细信息,请参阅Kestrel 终结点配置

Exceptions

异常消息通常被视为不应泄露给客户端的敏感数据。 默认情况下,gRPC 不会将 gRPC 服务引发的异常的详细信息发送到客户端。 相反,客户端将收到一条指示出错的一般消息。 向客户端发送的异常消息可以通过EnableDetailedErrors重写(例如,在开发或测试中)。 不应在生产应用程序中向客户端公开异常消息。

消息大小限制

传入消息到 gRPC 的客户端和服务将加载到内存中。 消息大小限制是一种有助于防止 gRPC 消耗过多资源的机制。

gRPC 使用每个消息的大小限制来管理传入消息和传出消息。 默认情况下,gRPC 限制传入消息的大小为 4 MB。 传出消息没有限制。

在服务器上,可以使用AddGrpc以下内容为应用中的所有服务配置 gRPC 消息限制:

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

还可以使用AddServiceOptions<TService>为单个服务配置限制。 有关配置消息大小限制的详细信息,请参阅gRPC 配置

客户端证书验证

建立连接后,最初会验证客户端证书 默认情况下,Kestrel 不会对连接的客户端证书执行额外的验证。

建议通过客户端证书保护的 gRPC 服务使用AspNetCore包。 ASP.NET Core 认证身份验证将对客户端证书执行其他验证,包括:

  • 证书具有有效的扩展密钥使用(EKU)
  • 在其有效期内
  • 检查证书吊销