2016-04-07 5 views
0

SSL証明書の公開鍵をxcodeプロジェクトに.crtとして保存しました.Alamofireを使用してhttpsを通じて自分のWebサイトに接続しようとしています。下記のショーとしてnilを返すSecCertificateCreateWithDataを使用している失敗し続ける一部、:ios:公開鍵SSLピンニングは返さない

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を印刷し、正しく得ることができますフォーマットされた結果。

証明書全体ではなく、公開鍵だけが保存されているという問題はありますか?明らかなセキュリティ上の理由からこれを避けたいのですが、なぜSec証明書を作成しようとするとnilを返すのか分かりません。

ありがとうございます!

+0

公開鍵をインポートすることはできません。その形式は、iOSが期待するものとは異なるためです。ここをクリックしてください:http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/ –

+0

この例はどのように動作しますか? https://github.com/antekarin/ssl-pinning-swift –

答えて

1

最終的にわかりましたが、正しいと思われるにもかかわらず、問題が私の証明書にありました。私はそれをopensslを通して.cerとして保存し直し、これを修正しました。奇妙なことに、Xcodeが同じものを表示したにもかかわらず、昇華やメモ帳で.cerとして再保存しようとしたとき、それぞれからNSDataを印刷して別のものを表示するまで動作しませんでした。

+0

ありがとうございます。あなたは私の一日を救った! – rmvz3