Я заранее извиняюсь за длинный вопрос. У меня возникают проблемы с самоподписанным сертификатом SSL, и я хочу документировать все, что я пробовал до сих пор.
Я работаю над приложением, которое общается с службой REST. На тестовом сервере используется самоподписанный сертификат ssl, который я могу установить на свой компьютер без проблем. Это файл .p12, для которого требуется установить пароль. Без этого сертификата все запросы на сервер возвращают 403.
.p12 устанавливает три элемента в цепочке ключей: "Корневой центр сертификации", сертификат "тестового пользователя", выданный "Корневым центром сертификации", и закрытый ключ, связанный с сертификатом "test user".
Я установил этот сертификат на своем iPad, отправив мне сам файл .p12. Я нажал на вложение, введите пароль, и теперь я могу получить доступ к сайту в Safari. К сожалению, из-за применения песочницы это недостаточно, чтобы заставить мое приложение общаться с сервисом REST.
Я использую ASIHTTPRequest для всей связи с службой REST из моего приложения. Каждый запрос является подклассом ASIHTTPRequest. Первое, что я нашел, мне нужно было сделать, это позвонить [self setValidatesSecureCertificate:NO];
, чтобы он даже попытался подключиться к серверу SSL. Если это все, что я делаю, я получаю 403 кода ошибок из службы.
Теперь я не могу понять, как получить запрос на использование сертификата. Я попытался экспортировать три элемента в отдельный файл .cer, включая их в проект, и добавить их в запрос, используя следующий код:
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"]];
SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)data);
...
[self setClientCertificates:[NSArray arrayWithObjects:(id)cert, ..., nil]];
Пока этот код выполняется без проблем с использованием этого подхода, я все равно получаю ошибку 403.
Я даже попытался включить файл .p12 в свое приложение и импортировал его с помощью того же кода. Это терпит неудачу, потому что SecCertificateCreateWithData
возвращает nil.
Я признаю, что не знаю, что я здесь делаю. Это все немного над моей головой, и любая помощь, которую кто-либо может мне дать, будет очень признательна.