Menggunakan repositori trustkit dan trustkit-android Dathatheorem
Perpustakaan platform asli dapat ditemukan di bawah
[ios] https://github.com/datatheorem/trustkit
[Android] https://github.com/datatheorem/trustkit-android
ios | https://www.nuget.org/packages/datatheorem.trustkit.net.ios
Android | https://www.nuget.org/packages/datatheorem.trustkit.net.android
Antarmuka dasar untuk pustaka ini adalah untuk mengganti httpmessageHandler pada konstruktor system.net.http.httpClient dengan versi yang ditingkatkan trustkit. Gunakan layanan ketergantungan yang Anda inginkan, contoh berikut ini menggunakan layanan ketergantungan Maui bawaan. Ini membangun penangan pesan HTTP spesifik platform untuk setiap klien HTTP yang diperlukan di pustaka kode bersama.
IHttpMessageHandlerFactory httpMessageHandlerFactory = DependencyService.Resolve<IHttpMessageHandlerFactory>();
HttpClient httpClient = new HttpClient(httpMessageHandlerFactory.BuildHttpMessageHandler());
Penangan yang ditentukan oleh iOS dan Android dapat ditimpa lebih lanjut untuk fungsi tambahan seperti yang diinginkan - cukup Subclass TrustkitiosClientHandler atau TrustKitandroidclientLientLer, dan kemudian menyuntikkan instance baru subkelas Anda ke klien Anda. Anda masih harus memanggil metode inisialisasi yang benar!
Menentukan nilai pin set bisa rumit: Ini adalah pengkodean basis 64 dari hash SHA256 dari info kunci publik subjek sertifikat. Setelah Anda mengunduh sertifikat dalam format .cer ke komputer Anda [dapat melakukan ini di Chrome, Firefox, dll.], Hitung nilai pin set menggunakan OpenSSL di terminal (ganti {CertificateName} .cer dengan nama aktual dari sertifikat yang diunduh).
openssl x509 -in {certificateName}.cer -pubkey -noout
| openssl pkey -pubin -outform der
| openssl dgst -sha256 -binary
| openssl enc -base64
Untuk iOS, konfigurasikan dengan menempatkan konfigurasi trustkit di info.plist seperti yang dijelaskan oleh pustaka trustkit asli. Ini tidak akan menggunakan swizzling dalam implementasi ini, bahkan jika swizzling dihidupkan di info.plist. Hanya httpClients dengan Parameter HTTPMessageHandler TrustKit yang akan menggunakan implementasi pinning sertifikat.
Dalam metode APPDelegate yang sudah jadi, pastikan untuk meletakkan:
httpMessageHandlerFactory.InitSharedInstanceWithConfiguration();
Ini menginisialisasi kode iOS trustkit.
Untuk Android, konfigurasikan dengan menempatkan konfigurasi trustkit di file konfigurasi keamanan Android normal (sumber daya/xml/network_security_config.xml) dan pastikan untuk mengikuti dokumentasi yang tersisa seperti yang dijelaskan oleh perpustakaan trustkit asli.
Dalam fungsi onCreate MainActivity, letakkan:
httpMessageHandlerFactory.InitializeWithNetworkSecurityConfiguration(this);
Ini menginisialisasi kode android trustkit.
Pinning sertifikat adalah teknik keamanan seluler yang penting (https://owasp.org/www-community/controls/certificate_and_public_key_pinning). Ini memungkinkan pengembang aplikasi untuk mengirimkan nilai sertifikat yang diketahui, (atau nilai kunci publik sertifikat) dengan aplikasi mereka. Kemudian, selama TLS Handshaking untuk membuat koneksi HTTPS yang aman dengan server jarak jauh, nilai yang diketahui yang dikirimkan ini dibandingkan dengan nilai yang disajikan oleh server (yang akan digunakan untuk mendekripsi paket). Jika nilai cocok, pengembang aplikasi seluler memungkinkan koneksi untuk melanjutkan. Jika tidak, pengembang dapat menghentikan koneksi dan menangani kegagalan namun mereka menganggap tepat (seperti memberi tahu pengguna).
Menggunakan System.net.httpClient yang lebih baru (https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient) dan menyuntikkan penangan pesan platform yang benar memungkinkan kami untuk menggunakan platform asli untuk layanan jaringan. Penangan pesan ini dapat diperluas dalam sejumlah cara untuk memungkinkan kompresi dan optimisasi lainnya seperti yang dicantumkan Jonathan di sini (http://jonathanpeppers.com/blog/improving-http-performance-in-xamarin-applications). Salah satu cara penting untuk memperluas penangan ini - dan motivasi repositori ini - adalah sertifikat pinning melalui implementasi perpustakaan yang bergantung pada platform oleh Dathatheorem.
Terima kasih kepada Anda semua atas bantuan dan minat Anda dalam mempertahankan dan memperbaiki masalah dengan repositori ini!