Исключение ионно-самоподписанного сертификата https на ios

Мы разрабатываем гибридное мобильное приложение на ionic, чтобы получать данные с сервера и отображать их в приложении. У нас есть самоподписанный сертификат для запроса к нашему серверу. Мы поместили файл .cer в проект xcode-> target для iOS. Это дает исключение для запроса https с использованием сертификата.

Ниже приведены наши версии среды разработки: ionic версия 3.20.0

мы используем следующий плагин для http. https://ionicframework.com/docs/native/http/

Ионный код, как показано ниже

let head = {
      'Access-Control-Allow-Origin' : '*',
      'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT',
      'Accept':'application/json',
      'content-type':'application/json'
    }


this.http.enableSSLPinning(true).then(data =>{
  console.info("SSL success");
 })
 .catch(error =>{
   console.info("SSL error");
 });
 this.http.acceptAllCerts(true);
 this.http.setDataSerializer("json");
    this.http.post(this.getProfileURL, requestData, head)
  .then(data => {
console.info("success");
  resolve(JSON.parse(data.data));
  })
  .catch(error => {
   reject(error.error);

  });
});

Этот код работает на Android, а не на iOS. Это дает ошибку ниже: * Завершение работы приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '* - [__ NSArrayM insertObject: atIndex:]: объект не может быть нулевым '

Вопросов: 1. Правильно ли расположение сертификата? (Мы поместили файл .cer в проект xcode-> target для iOS.) 2. Какой тип сертификата мы должны использовать - .cer, .der, .pem? 3. Как разрешить исключение NSInvalidArgumentException?

Любая помощь по этому поводу будет оценена. Спасибо.

Я мог бы решить эту проблему, выполнив следующие шаги: 1. Поместите файл .der в местоположение - проект-> цель ИЛИ www / Certificates 2. В своем быстром коде iOS перейдите к файлу AFSecurityPolicy.m в методе CertificInBundle и измените пути к пакетамForResourcesOfType : @ "cer" для объединения pathsForResourcesOfType: @ "der"

Harsha Garg 02.07.2018 11:32

Мы сталкиваемся с аналогичной проблемой как с iOS, так и с Android, не могли бы вы помочь. Выдает ошибку сертификата. Вот мой код: import {HttpClient, HttpHeaders} из '@ angular / common / http'; импортировать {HTTP, HTTPResponse} из '@ ionic-native / http'; конструктор (частный _mHTTP: HTTP) {} this._mHTTP.get (путь, {}, заголовки) .then ((d) => {let t: T = this.convertReturn <T> (d.data); return t ;}) В настоящий момент появляется код ошибки: 0

Mrunal 30.11.2018 18:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
908
1

Ответы 1

У меня была эта проблема, и моя проблема заключалась в формате сертификата. Изначально формат был PEM, и в iOS вам нужно использовать формат DER.

Если это ваш случай, вы можете легко преобразовать свой сертификат с помощью следующей команды open_ssl:

openssl x509 -outform der -in myCertificate.cer -out myFormattedCertificate.cer

Подсказка: вы можете легко проверить, находится ли ваш сертификат в формате PEM, если откроете его в текстовом редакторе, таком как Sublime Text. Вы увидите, что это начинается примерно с этого: «----- НАЧАТЬ СЕРТИФИКАТ -----»

Другие вопросы по теме