Вопросы безопасности применительно к gRPC для ASP.NET Core
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 8 этой статьи.
Автор: Джеймс Ньютон-Кинг (James Newton-King)
В этой статье представлены сведения о защите gRPC в .NET Core.
Транспортная безопасность
Сообщения gRPC отправляются и принимаются по протоколу HTTP/2. Примите во внимание следующие рекомендации.
- Для защиты сообщений в рабочих приложениях gRPC следует использовать протокол TLS.
- Службы gRPC должны ожидать передачи данных и отвечать только через защищенные порты.
TLS настраивается в Kestrel. Дополнительные сведения о настройке конечных точек Kestrel см. в статье Конфигурация конечной точки Kestrel.
TLS настраивается в Kestrel. Дополнительные сведения о настройке конечных точек Kestrel см. в статье Конфигурация конечной точки Kestrel.
Прокси-сервер завершения сеанса TLS можно сочетать с TLS. Преимущества использования завершения сеанса TLS следует рассматривать в сравнении с рисками безопасности при отправке незащищенных HTTP-запросов между приложениями в частной сети.
Исключения
Сообщения об исключениях, как правило, считаются конфиденциальными данными, которые не следует раскрывать клиенту. По умолчанию gRPC не отправляет сведения об исключении, возникшем в службе gRPC, клиенту. Вместо этого клиент получает общее сообщение с указанием произошедшей ошибки. Доставку сообщений об исключениях клиенту можно переопределить (например, при разработке или тестировании) с помощью EnableDetailedErrors. В рабочих приложениях сообщения об исключениях не должны предоставляться клиенту.
Ограничения на размер сообщений
Входящие сообщения для клиентов и служб gRPC загружаются в память. Ограничения на размер сообщений позволяют предотвратить чрезмерное потребление ресурсов системой gRPC.
В gRPC используются ограничения на размер отдельных входящих и исходящих сообщений. По умолчанию максимальный размер входящего сообщения в gRPC составляет 4 МБ. На размер исходящих сообщений ограничений нет.
На сервере можно настроить ограничения на размер сообщений для всех служб приложения gRPC с помощью AddGrpc
:
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, защищенные с помощью сертификатов клиента, использовали пакет Microsoft.AspNetCore.Authentication.Certificate. При проверке подлинности на основе сертификата в ASP.NET Core выполняются дополнительные проверки сертификата клиента, включая следующие:
- сертификат имеет допустимое значение расширенного использования ключа (EKU);
- период действия сертификата не истек;
- проверка отзыва сертификата.
ASP.NET Core