باستخدام مستودعات TrustKit و Trustkit-Android من Datatheorem
يمكن العثور على مكتبات المنصات الأصلية أدناه
[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
الواجهة الأساسية لهذه المكتبة هي تجاوز HttpMessageHandler على مُنشئ System.net.http.httpclient مع نسخة محسّنة. استخدم أي خدمة تبعية تريدها ، ويستخدم المثال التالي خدمة التبعية المضمنة في MAUI. هذا يبني معالج رسائل HTTP المحدد من النظام الأساسي لأي عملاء HTTP مطلوبون في مكتبة التعليمات البرمجية المشتركة.
IHttpMessageHandlerFactory httpMessageHandlerFactory = DependencyService.Resolve<IHttpMessageHandlerFactory>();
HttpClient httpClient = new HttpClient(httpMessageHandlerFactory.BuildHttpMessageHandler());
يمكن كتابة معالجات iOS و Android المحددة بشكل أكبر من أجل وظائف إضافية كما هو مطلوب - فقط الفئة الفرعية TrustKitiosClientHandler أو TrustKitAndRidclientHandler ، ثم حقن مثيلًا جديدًا من فئتك الفرعية في عملائك. لا يزال يتعين عليك استدعاء طرق التهيئة الصحيحة!
يمكن أن يكون تحديد قيم مجموعة PIN أمرًا صعبًا: إنه ترميز 64 من تجزئة SHA256 لمعلومات المفتاح العام لموضوع الشهادة. بعد تنزيل الشهادة في تنسيق .cer على جهاز الكمبيوتر الخاص بك [يمكنك القيام بذلك على Chrome ، و Firefox ، وما إلى ذلك] ، قم بحساب قيمة مجموعة PIN الخاصة به باستخدام OpenSSL على المحطة (استبدل {CertificateName}. CER بالاسم الفعلي للشهادة التي تم تنزيلها).
openssl x509 -in {certificateName}.cer -pubkey -noout
| openssl pkey -pubin -outform der
| openssl dgst -sha256 -binary
| openssl enc -base64
بالنسبة إلى iOS ، قم بتكوينه عن طريق وضع تكوين TrustKit في info.plist كما هو موضح في مكتبة TrustKit الأصلية. لن يستخدم Swizzling في هذا التنفيذ ، حتى لو تم تشغيل swizzling في info.plist. فقط HTTPClients مع معلمة HTTPMessageHandler TrustKit سوف تستخدم تنفيذ تعليق الشهادة.
في طريقة الانتهاء من AppDelegate ، تأكد من وضع:
httpMessageHandlerFactory.InitSharedInstanceWithConfiguration();
هذا يهيئة رمز iOS TrustKit.
بالنسبة إلى Android ، قم بتكوينه عن طريق وضع تكوين TrustKit في ملف تكوين أمان Android العادي (الموارد/XML/Network_security_config.xml) وتأكد من اتباع الوثائق المتبقية كما هو موضح في مكتبة TrustKit الأصلية.
في وظيفة oncreate الرئيسية ، ضع:
httpMessageHandlerFactory.InitializeWithNetworkSecurityConfiguration(this);
هذا يهيئة رمز أندرويد Trustkit.
تعتبر تعلق الشهادة بمثابة تقنية أمان مهمة (https://owasp.org/www-community/controls/certificate_and_public_key_pinning). يتيح لمطوري التطبيقات شحن قيمة شهادة معروفة ، (أو قيمة المفتاح العام للشهادة) مع طلبهم. بعد ذلك ، أثناء مصافحة TLS لإنشاء اتصال HTTPS آمن مع خادم بعيد ، تتم مقارنة هذه القيمة المعروفة التي يتم شحنها بالقيمة المقدمة من الخادم (والتي سيتم استخدامها لفك تشفير الحزم). إذا تتطابق القيمة ، يسمح مطور تطبيقات الهاتف المحمول للاتصال بالمتابعة. إذا لم يحدث ذلك ، يمكن للمطور إيقاف الاتصال والتعامل مع الفشل ، ومع ذلك يعتبرون مناسبًا (مثل إخطار المستخدم).
باستخدام System.net.httpclient الأحدث (https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient) ، ويتيح لنا حقن معالجات رسائل النظام الأساسي الصحيحة استخدام النظام الأساسي الأصلي لخدمات الشبكة. يمكن تمديد معالجات الرسائل هذه بعدة طرق للسماح بالضغط والتحسينات الأخرى مثل قوائم جوناثان هنا (http://jonathanpeppers.com/blog/improving-http-porformance-in-xamarin-applications). إحدى الطرق المهمة لتوسيع هؤلاء المعالجات - ودوافع هذا المستودع - هو تثبيت الشهادة عبر تطبيقات المكتبة المعتمدة على النظام الأساسي بواسطة DataTheorem.
شكراً لكم جميعًا على مساعدتكم واهتمامكم في الحفاظ على المشكلات وتثبيتها مع هذا المستودع!