ASP.NET Core: Những cân nhắc về bảo mật trong gRPC cho ASP.NET Core
Trong bài viết này
- Bảo mật truyền tải (Transport Security)
- Ngoại lệ
- Giới hạn kích thước tin nhắn
- Xác thực chứng chỉ máy khách
Bài viết này cung cấp thông tin về cách bảo mật gRPC bằng .NET Core.
Bảo mật truyền tải (Transport Security)
Tin nhắn gRPC được gửi và nhận bằng HTTP/2. Lời khuyên đưa ra là bạn nên:
- Bảo mật lớp truyền tải (Transport Layer Security - TLS) được sử dụng để bảo mật tin nhắn trong các ứng dụng gRPC phiên bản production.
- Dịch vụ gRPC chỉ nên lắng nghe và phản hồi qua các cổng được bảo mật.
TLS được cấu hình trong Kestrel. Để biết thêm thông tin về cách định cấu hình điểm cuối Kestrel, hãy xem Cấu hình điểm cuối Kestrel.
Proxy chấm dứt TLS có thể được kết hợp với TLS. Cần cân nhắc lợi ích của việc sử dụng tính năng chấm dứt TLS trước các rủi ro bảo mật khi gửi yêu cầu HTTP không bảo mật giữa các ứng dụng trong mạng riêng.
Ngoại lệ
Thông báo ngoại lệ thường được coi là dữ liệu nhạy cảm không được tiết lộ cho máy khách. Theo mặc định, gRPC không gửi thông tin chi tiết về một ngoại lệ do dịch vụ gRPC gửi tới máy khách. Thay vào đó, máy khách nhận được một thông báo chung cho biết đã xảy ra lỗi. Việc gửi thông báo ngoại lệ tới máy khách có thể bị ghi đè (ví dụ: trong quá trình phát triển hoặc thử nghiệm) bằng EnableDetailedErrors. Thông báo ngoại lệ không được hiển thị cho máy khách trong ứng dụng production.
Giới hạn kích thước tin nhắn
Tin nhắn đến máy khách và dịch vụ gRPC sẽ được tải vào bộ nhớ. Giới hạn kích thước tin nhắn là một cơ chế giúp ngăn gRPC tiêu thụ quá nhiều tài nguyên.
gRPC sử dụng giới hạn kích thước mỗi tin nhắn để quản lý tin nhắn đến và đi. Theo mặc định, gRPC giới hạn tin nhắn đến ở mức 4 MB. Không có giới hạn về tin nhắn gửi đi.
Trên máy chủ, giới hạn tin nhắn gRPC có thể được định cấu hình cho tất cả các dịch vụ trong ứng dụng với AddGrpc
:
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(options =>
{
options.MaxReceiveMessageSize = 1 * 1024 * 1024; // 1 MB
options.MaxSendMessageSize = 1 * 1024 * 1024; // 1 MB
});
}
Các giới hạn cũng có thể được định cấu hình cho một dịch vụ riêng lẻ bằng cách sử dụng AddServiceOptions<TService>
. Để biết thêm thông tin về cách định cấu hình giới hạn kích thước tin nhắn, hãy xem cấu hình gRPC.
Xác thực chứng chỉ máy khách
Chứng chỉ máy khách ban đầu được xác thực khi kết nối được thiết lập. Theo mặc định, Kestrel không thực hiện xác thực bổ sung chứng chỉ máy khách của kết nối.
Lời khuyên là các dịch vụ gRPC được bảo mật bằng chứng chỉ máy khách nên sử dụng gói Microsoft.AspNetCore.Authentication.Certificate. Xác thực chứng chỉ ASP.NET Core sẽ thực hiện xác thực bổ sung trên chứng chỉ ứng dụng khách, bao gồm:
- Chứng chỉ có cách sử dụng khóa mở rộng hợp lệ (EKU)
- Đang trong thời hạn hiệu lực
- Kiểm tra việc thu hồi chứng chỉ