การใช้ที่เก็บข้อมูลของ DataTheorem และ Trustkit-Android
ห้องสมุดแพลตฟอร์มดั้งเดิมสามารถดูได้ด้านล่าง
[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 constructor ด้วยรุ่นที่ได้รับการปรับปรุงที่เชื่อถือได้ ใช้บริการการพึ่งพาใด ๆ ที่คุณต้องการตัวอย่างต่อไปนี้ใช้บริการการพึ่งพา MAUI ในตัว สิ่งนี้จะสร้างตัวจัดการข้อความ HTTP เฉพาะแพลตฟอร์มสำหรับไคลเอนต์ HTTP ใด ๆ ที่จำเป็นในไลบรารีรหัสที่ใช้ร่วมกัน
IHttpMessageHandlerFactory httpMessageHandlerFactory = DependencyService.Resolve<IHttpMessageHandlerFactory>();
HttpClient httpClient = new HttpClient(httpMessageHandlerFactory.BuildHttpMessageHandler());
ตัวจัดการที่กำหนด iOS และ Android สามารถเขียนทับต่อไปสำหรับฟังก์ชั่นเพิ่มเติมตามที่ต้องการ - เพียงแค่ subclass trustkitiosclienthandler หรือ trustkitandroidClienthandlerder จากนั้นฉีดอินสแตนซ์ใหม่ของคลาสย่อยของคุณเข้าสู่ลูกค้าของคุณ คุณยังต้องเรียกวิธีการเริ่มต้นที่ถูกต้อง!
การกำหนดค่าชุดพินอาจเป็นเรื่องยาก: มันคือการเข้ารหัสฐาน 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 ให้กำหนดค่าโดยการกำหนดค่าความน่าเชื่อถือใน info.plist ตามที่อธิบายโดยไลบรารี Trustkit ดั้งเดิม มันจะไม่ใช้ Swizzling ในการใช้งานนี้แม้ว่าการหมุนจะเปิดอยู่ใน info.plist เฉพาะ HTTPClients ที่มีพารามิเตอร์ HttpMessageHandler ที่เชื่อถือได้เท่านั้นที่จะใช้การใช้งานการตรึงใบรับรอง
ในวิธีการเปิดตัวของ AppDelegate ให้แน่ใจว่าได้ใส่:
httpMessageHandlerFactory.InitSharedInstanceWithConfiguration();
สิ่งนี้เริ่มต้นรหัส iOS TrustKit
สำหรับ Android กำหนดค่าโดยการกำหนดค่าความน่าเชื่อถือในไฟล์การกำหนดค่าความปลอดภัย Android ปกติ (ทรัพยากร/XML/Network_Security_Config.xml) และตรวจสอบให้แน่ใจว่าได้ติดตามเอกสารที่เหลืออยู่ตามที่อธิบายไว้โดยไลบรารี TrustKit ดั้งเดิม
ในฟังก์ชั่น oncreate ของ mainactivity ใส่:
httpMessageHandlerFactory.InitializeWithNetworkSecurityConfiguration(this);
สิ่งนี้เริ่มต้นรหัส Android 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-performance-in-xamarin-applications) วิธีหนึ่งที่สำคัญในการขยายตัวจัดการเหล่านี้ - และแรงจูงใจของที่เก็บนี้คือการตรึงใบรับรองผ่านการใช้งานไลบรารีขึ้นอยู่กับแพลตฟอร์มโดย DataTheOreem
ขอขอบคุณทุกท่านสำหรับความช่วยเหลือและความสนใจในการรักษาและแก้ไขปัญหากับที่เก็บนี้!