2016-07-14 6 views
1

У меня есть .pem-файл, который успешно подключится к моему сайту через параметр -cert curl. Конвертировал, что в дер файла:Alamofire и сертификат PEM

OpenSSL x509 PEM-информ -outform DER -in client.pem -out cert.der

Тогда я загрузил что cert.der в мой проект и Я сейчас пытаюсь использовать это с Alamofire, следуя примеру на своей домашней странице:

let serverTrustPolicy = ServerTrustPolicy.PinCertificates(
     certificates: ServerTrustPolicy.certificatesInBundle(), 
     validateCertificateChain: true, 
     validateHost: true 
    ) 

    let policyManager = ServerTrustPolicyManager(policies: ["my.domain.com" : serverTrustPolicy]) 
    manager = Alamofire.Manager(configuration: configuration, serverTrustPolicyManager: policyManager) 
    manager.request(.GET, url, parameters: params, encoding: .URLEncodedInURL, headers: nil) 
     .authenticate(usingCredential: credential) 
     .validate() 
     .responseJSON { 

когда это работает, хотя это просто не удается, и я получаю «отменен», как localizedDescription ошибка, которая является то, что делает Alamofire когда проверка подлинности не выполняется.

Что я делаю неправильно?

+0

Привет, Я пытаюсь сделать то же самое, я создал csr, отправил его на сервер, а затем получил сертификат клиента .... теперь мне нужно объединить его, как это сделать программно? не могли бы вы мне помочь? спасибо – beretis

ответ

1

В настоящее время логика фиксации сертификата Alamofire не поддерживает этот прецедент. Он предназначен только для обработки сертификатов и открытых ключей, а не для сертификатов клиентов, используемых для аутентификации с сервером. Это то, что мы могли бы поддержать в будущем, если это распространенный вариант использования.

С учетом сказанного, я предполагаю, что в этом случае вы получаете NSURLAuthenticationChallenge с защитным пространством, которое имеет метод аутентификации типа .NSURLAuthenticationMethodClientCertificate. В этих случаях вам нужно оценить хозяина задачи, а затем создать NSURLCredential с использованием API credentialWithIdentity:certificates:persistence:. Передав этот учетный сигнал обработчику завершения, сертификат клиента должен быть отправлен на сервер для аутентификации соединения. Больше информации можно найти here.

Аутентификация сертификата клиента (NSURLAuthenticationMethodClientCertificate) требует идентификатора системы и всех сертификатов, необходимых для аутентификации с сервером. Создайте объект NSURLCredential с credentialWithIdentity: certificate: persistence :.

У меня никогда не было необходимости использовать этот тип аутентификации раньше. Вам необходимо переопределить вызов auth SessionDelegate, закрыв закрытие задачи, чтобы получить эту работу.

+0

http://veewee.github.io/blog/authenticating-with-x509-client-certificates/ показывает, что я делаю. Вот где я получил идею аутентификации сертификата. В основном OAuth - это боль для настройки и управления, а маршрут сертификата гарантирует, что вы не подвергаетесь риску только потому, что кто-то использовал «пароль» для своего пароля. – Gargoyle

+0

Не совсем уверен, как переопределить делегат. Можете ли вы привести небольшой пример? – Gargoyle

+0

Ничего, я понял, как его переопределить. – Gargoyle

Смежные вопросы