2016-04-07 3 views
0

Я сохранил открытый ключ моего SSL-сертификата в моем проекте xcode как .crt, и я пытаюсь использовать Alamofire для подключения к моему сайту через https. Та часть, которая держит неудачу использует SecCertificateCreateWithData, который возвращает ноль, как показано ниже:ios: Public Key SSL Pinning Returns Nil

func configureAlamoFireSSLPinningWithCertificateData() { 

    let cert = "nameOfCert" 
    let pathToCert = NSBundle.mainBundle().pathForResource(cert, ofType: "crt") 
    let certificateData:NSData = NSData(contentsOfFile: pathToCert!)! 
    let localCertificate = SecCertificateCreateWithData(nil, certificateData)! //RETURNS NIL 

    self.serverTrustPolicy = ServerTrustPolicy.PinCertificates(
     certificates: [localCertificate], 
     // Choose to validate the complete certificate chain, not only the certificate itself 
     validateCertificateChain: true, 
     // Check that the certificate mathches the host who provided it 
     validateHost: true 
    ) 

    self.serverTrustPolicies = [ 
     "nameOfTrustedServer": self.serverTrustPolicy! 
    ] 
    self.afManager = Manager(
     configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), 
     serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies) 
    ) 
} 

Я посмотрел на сертификат в проекте, и все, кажется, хорошо, и я также могу напечатать certificateData и получить правильно отформатированный результат.

Является ли проблема, что у меня есть только открытый ключ, а не весь сертификат? Я бы хотел избежать этого по очевидным причинам безопасности, но я не могу понять, почему он возвращает nil при попытке создать сертификат Sec.

Заранее благодарен!

+0

Вы не можете просто импортировать открытый ключ, потому что его формат отличается от того, что ожидает iOS. Читайте здесь: http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/ –

+0

Как этот пример работает? https://github.com/antekarin/ssl-pinning-swift –

ответ

1

Наконец-то выяснилось, проблема была в моем сертификате, хотя она оказалась правильной. Я исправил его, сохранив его как .cer через openssl, и это исправило его. Вряд ли, когда я попытался повторно сохранить его как .cer в возвышенном или блокноте, он не сработал, хотя Xcode отображал их одинаково, пока я не напечатал NSData от каждого, и это показало, что они разные.

+0

Спасибо. Ты спас мой день! – rmvz3