Я сохранил открытый ключ моего 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.
Заранее благодарен!
Вы не можете просто импортировать открытый ключ, потому что его формат отличается от того, что ожидает iOS. Читайте здесь: http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/ –
Как этот пример работает? https://github.com/antekarin/ssl-pinning-swift –