Pertimbangan keamanan di gRPC untuk ASP.NET Core
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Oleh James Newton-King
Artikel ini menyediakan informasi tentang mengamankan gRPC dengan .NET Core.
Keamanan Transportasi
Pesan gRPC dikirim dan diterima menggunakan HTTP/2. Kami menyarankan:
- Keamanan Lapisan Transportasi (TLS) digunakan untuk mengamankan pesan dalam aplikasi gRPC produksi.
- Layanan gRPC hanya boleh mendengarkan dan merespons melalui port aman.
TLS dikonfigurasi dalam Kestrel. Untuk informasi selengkapnya tentang mengonfigurasi Kestrel titik akhir, lihat Kestrel konfigurasi titik akhir.
TLS dikonfigurasi dalam Kestrel. Untuk informasi selengkapnya tentang mengonfigurasi Kestrel titik akhir, lihat Kestrel konfigurasi titik akhir.
Proksi penghentian TLS dapat dikombinasikan dengan TLS. Manfaat menggunakan penghentian TLS harus dipertimbangkan terhadap risiko keamanan pengiriman permintaan HTTP yang tidak aman antara aplikasi di jaringan privat.
Pengecualian
Pesan pengecualian umumnya dianggap sebagai data sensitif yang seharusnya tidak diungkapkan kepada klien. Secara default, gRPC tidak mengirim detail pengecualian yang dilemparkan oleh layanan gRPC ke klien. Sebagai gantinya, klien menerima pesan generik yang menunjukkan terjadinya kesalahan. Pengiriman pesan pengecualian ke klien dapat ditimpa (misalnya, dalam pengembangan atau pengujian) dengan EnableDetailedErrors. Pesan pengecualian tidak boleh diekspos ke klien di aplikasi produksi.
Batas ukuran pesan
Pesan masuk ke klien dan layanan gRPC dimuat ke dalam memori. Batas ukuran pesan adalah mekanisme untuk membantu mencegah gRPC mengkonsumsi sumber daya yang berlebihan.
gRPC menggunakan batas ukuran per pesan untuk mengelola pesan masuk dan keluar. Secara default, gRPC membatasi pesan masuk ke 4 MB. Tidak ada batasan pada pesan keluar.
Di server, batas pesan gRPC dapat dikonfigurasi untuk semua layanan di aplikasi dengan AddGrpc
:
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(options =>
{
options.MaxReceiveMessageSize = 1 * 1024 * 1024; // 1 MB
options.MaxSendMessageSize = 1 * 1024 * 1024; // 1 MB
});
}
Batas juga dapat dikonfigurasi untuk layanan individual menggunakan AddServiceOptions<TService>
. Untuk informasi selengkapnya tentang mengonfigurasi batas ukuran pesan, lihat konfigurasi gRPC.
Validasi sertifikat klien
Sertifikat klien awalnya divalidasi saat koneksi dibuat. Secara default, Kestrel tidak melakukan validasi tambahan sertifikat klien koneksi.
Sebaiknya layanan gRPC yang diamankan oleh sertifikat klien menggunakan paket Microsoft.AspNetCore.Authentication.Certificate . autentikasi sertifikasi ASP.NET Core akan melakukan validasi tambahan pada sertifikat klien, termasuk:
- Sertifikat memiliki penggunaan kunci yang diperluas (EKU) yang valid
- Berada dalam periode validitasnya
- Periksa pencabutan sertifikat
ASP.NET Core