Мы разрабатываем гибридное мобильное приложение на 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?
Любая помощь по этому поводу будет оценена. Спасибо.
Мы сталкиваемся с аналогичной проблемой как с 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





У меня была эта проблема, и моя проблема заключалась в формате сертификата. Изначально формат был PEM, и в iOS вам нужно использовать формат DER.
Если это ваш случай, вы можете легко преобразовать свой сертификат с помощью следующей команды open_ssl:
openssl x509 -outform der -in myCertificate.cer -out myFormattedCertificate.cer
Подсказка: вы можете легко проверить, находится ли ваш сертификат в формате PEM, если откроете его в текстовом редакторе, таком как Sublime Text. Вы увидите, что это начинается примерно с этого: «----- НАЧАТЬ СЕРТИФИКАТ -----»
Я мог бы решить эту проблему, выполнив следующие шаги: 1. Поместите файл .der в местоположение - проект-> цель ИЛИ www / Certificates 2. В своем быстром коде iOS перейдите к файлу AFSecurityPolicy.m в методе CertificInBundle и измените пути к пакетамForResourcesOfType : @ "cer" для объединения pathsForResourcesOfType: @ "der"