Pertimbangan keamanan di gRPC untuk ASP.NET Core

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:

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