كيفية التحقق من شهادة موقع الويب في Cocoa Touch؟
-
12-09-2019 - |
سؤال
أقوم حاليا بفتح اتصال HTTPS بخادم ويب باستخدام NSurLConnection. كل شيء يعمل كما يجب أن يسترجع محتوى الصفحة أنا بعد. تصدر الشهادة عن طريق VeriSign وأنا أفترض أن NsurlConnection هل بعض العمل للتحقق من صحة الشهادة إلى حد ما؟ إذا قمت بالتواصل مع نفس الموقع من خلال Safari المحمول، فسيتم استخراجه من الشهادة، وعرض المنظمة (من الموقع الإلكتروني) في شريط التنقل. هل من المحتمل استخراج هذه التفاصيل نفسها في اتصال الكاكاو كما أود أن أقدمها للمستخدم؟ كما سيحقق اسم مضيف الخادم ضد تلك الشهادة معقولة بما يكفي لتحمل موقع الويب هو شرعي؟
المحلول
NSURLConnection
سوف تعطيك خطأ (NSURLErrorDomain
) إذا حاولت الاتصال بالخادم بشهادة غير صالحة (على سبيل المثال، فقد تم توقيعها على نفسه، فقد يكون هناك مضيف خاطئ وما إلى ذلك). لذلك أنت لا تحتاج فعليا إلى القيام بأي تحقق بنفسك، لأن كل شيء يتعامل معك.
إذا كنت تريد حقا / تحتاج إلى عرض ملخص شهادة SSL في UI، فستحتاج إلى إسقاط طبقة من NSURLConnection
واستخدام مستوى منخفض CFNetwork
API بدلا من ذلك. بمجرد أن يكون لديك CFReadStreamRef
هذا في kCFStreamEventEndEncountered
الحالة، يجب أن تكون قادرا على القيام بما يلي (لتحمل مقبض دفق الخاص بك يسمى readStream
):
NSArray* certificates = [(NSArray*)CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates) autorelease];
if ([certificates count] > 0) {
SecCertificateRef certificate = (SecCertificateRef)[certificates objectAtIndex:0];
NSString* description = [(NSString*)SecCertificateCopySubjectSummary(certificate) autorelease];
NSData* data = [(NSData*)SecCertificateCopyData(certificate) autorelease];
}
ستحتاج إلى فك تشفير المعلومات الموجودة في data
إذا كنت ترغب في الوصول إلى خصائص الشهادة المختلفة، ولكن الموجزة التي عقدت في description
قد يكون كافيا لأغراضك.