طريقة بديلة ل NSurlRequest الخاصة "Setallowsanyhtttscertificate: Forhost:"؟
-
18-09-2019 - |
سؤال
تم رفض تطبيق iPhone الخاص بي فقط لاستخدام الطريقة الخاصة (آمنة للغاية، ويبدو) +setAllowsAnyHTTPSCertificate:forHost:
بالنسبة NSURLRequest
. وبعد هل هناك API غير خاص لمحاكاة هذه الوظيفة؟
المحلول
يبدو أن هناك API عام لذلك؛)كيفية استخدام nsurlconnection للتواصل مع SSL للحصول على سيرت غير موثوق بها؟
نصائح أخرى
في الواقع، أنا اختبار مع 10.6.8 وما زال هذا الرمز يعمل - يستخدم API الخاص ولكن التحقق من أن المحدد موجود (Myurl هو NSURL أحاول التحميل في WebView أو NsurlConnection):
SEL selx = NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:");
if ( [NSURLRequest respondsToSelector: selx] )
{
IMP fp;
fp = [NSURLRequest methodForSelector:selx];
(fp)([NSURLRequest class], selx, YES, [myurl host]);
}
لاحظ أن "الأشخاص" لم يتم استخدامها بحيث تكون على الإطلاق الكل سيتم القيام بالعمل في وقت التشغيل. هذا يجعلها آمنة ومخفية من عمليات التحقق من Apple كما هي، خاصة إذا كنت تحجب السلسلة.
أحد الحلول الغبية حقا هو جعل طريقة فئة خاصة بك:
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
يجب أن يحصل ذلك على الشيكات الخاصة ب API الخاصة بشركة Apple، لكنها لا تزال نفس الشيء (باستخدام واجهة برمجة تطبيقية خاصة وغير موثقة [1] والتي هي عرضة للكسر في أي وقت). في الواقع، الأمر أسوأ لأنه يسمح بكل شيء، وليس فقط هذا المضيف.
1]: API الخاص ذلك ينبغي يتم الإعلان، ولكن API الخاص مع ذلك.
يبدو setallowsanyhttpscertificate الآن غير مدعوم في نظام التشغيل X 10.6.6 تماما.
هل قلت 10.6.6؟ ربما كان ينبغي علي أن قال "سنو فيستا".
ليس حلا، ولكن اقتراح. هل فكرت في استخدام إطار asihttprequest لهذا؟ اكتمال هذا الإطار في جميع الجوانب. تحقق من الوثائق، ربما يمكن أن تساعدك أيضا.