English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

مشكلة التكيف مع الشهادات HTTPS في iOS (مثال على AFNetworking 3.0)

من المعروف أن شركة Apple قالت، منذ عام 2017، ستقوم بتعطيل موارد http، وتقديم https

المطورون الذين قاموا مؤخرًا بتحويل http إلى https، يشاركون أصدقاء لم يبدأوا بعد

1. إعداد الشهادة

أولاً نطلب من الورقة الخلفية شهادة (شهادة SSL، عادةً عندما نطلب من الورقة الخلفية إنشاء https، فإنه يعرف أنه يجب عليه إعطاؤنا شهادة، ثم يعطينا شهادة. نحن بحاجة إلى شهادة .cer. ولكن قد تعطينا الورقة الخلفية شهادة.crt. نحتاج إلى تحويلها: افتح المحطة -> انتقل إلى مسار شهادة.crt -> اكتب openssl x509 -in شهادتك.crt -out شهادتك.cer -outform der، تكون الشهادة جاهزة، أرفعها إلى المشروع، تذكر أن تختار نسخها.

2. قم بإنشاء فئة جديدة أو طريقة فئوية

الشيفرة التالية مستعارة، يقوم الكاتب بأنه يضعها في فئة تُدعى FactoryUI

//يدعم https
+ (AFSecurityPolicy *)customSecurityPolicy
{
  //يتم استيراد الشهادة، العثور على مسار الشهادة
  NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"اسم شهادتك" ofType:@"cer"];
  NSData *certData = [NSData dataWithContentsOfFile:cerPath];
  //AFSSLPinningModeCertificate يستخدم نمط التحقق من الشهادة
  AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
  //allowInvalidCertificates ما إذا كان يُسمح بالشهادات غير الصالحة (أي الشهادات الذاتية)، الافتراضي هو NO
  //إذا كان يجب التحقق من الشهادة الذاتية، يجب ضبطها على YES
  securityPolicy.allowInvalidCertificates = YES;
  //validatesDomainName ما إذا كان يجب التحقق من اسم المجال، الافتراضي هو YES;
  //إذا كان اسم المجال في الشهادة غير متطابق مع اسم المجال الذي تطلبونه، يجب ضبط هذا المعدل على NO؛ إذا تم ضبطه على NO، يمكن أيضًا إنشاء اتصال باستخدام الشهادة المصدرة من قبل مؤسسة موثوقة أخرى، وهو أمر خطير جدًا، يُنصح بفتحه.
  //إذا تم ضبطه على NO، يتم استخدامه في هذه الحالة: يطلب العملاء اسم مجال فرعي، بينما هو مجال آخر في الشهادة. لأن اسم المجال في الشهادة SSL مستقل، إذا كان اسم المجال المسجل في الشهادة هو www.google.com، فإن mail.google.com لن يتم التحقق منه؛ بالطبع، إذا كان لديك المال لتحديد اسم مجال واسع النطاق *.google.com، إلا أن هذا يكون مكلفًا نسبيًا.
  //إذا تم ضبطه على NO، يُنصح بإضافة منطق التحقق من اسم المجال الخاص بك.
  securityPolicy.validatesDomainName = NO;
  NSSet *set = [[NSSet alloc] initWithObjects:certData, nil];
  securityPolicy.pinnedCertificates = set;
  return securityPolicy;
}

3. تعديل طلبات AFNetWorking (مثال على AFNetworking 3.0)

  AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  manager.responseSerializer = [AFHTTPResponseSerializer serializer];
  manager.requestSerializer.timeoutInterval = 5.0;
  [manager setSecurityPolicy:[FactoryUI customSecurityPolicy]];//مثل الطريقة الفئة لـ FactoryUI المذكورة في 2

 الآتي يتبعه نفس الشكل

إضافة: يجب إعداد إعدادات أمان نقل التطبيق

هذا هو نهاية محتوى هذا المقال، نأمل أن يكون قد ساعدكم في التعلم، ونأمل أن تدعموا تعليمات النطق.

بيان: محتوى هذا المقال تم استنساخه من الإنترنت، يحق للمالك الأصلي الحصول عليه، تم إضافة المحتوى من قبل مستخدمي الإنترنت بشكل متعاوني وبدون تدخل بشري، هذا الموقع لا يملك حقوق الملكية، ولا يتحمل أي مسؤولية قانونية. إذا كنت قد وجدت محتوى يشتبه في حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال #بـ @) للإبلاغ، وتقديم الدليل على ذلك، إذا تم التحقق من ذلك، فإن هذا الموقع سيقوم بإزالة المحتوى المشبوه فوراً.

سيكون لديك أيضًا مثل هذا