Big*_*Lex 15 ssl ios afnetworking
在我的应用程序中,我使用https和自签名SSL证书来保护我的客户端和服务器之间的连接.
我试图让AFNetworking库在我的应用程序捆绑的证书副本上进行SSL Pinning.
在AFURLConnectionOperation标题中我定义了两个:
#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ =1
#define _AFNETWORKING_PIN_SSL_CERTIFICATES_ =1
Run Code Online (Sandbox Code Playgroud)
在调用starton 之前AFJSONRequestOperation我将SSLPinningMode属性设置为AFSSLPinningModeCertificate.
但是在尝试执行JSON请求时,我不断收到以下错误:
Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed.
(NSURLErrorDomain error -1012.)" UserInfo=0x758f120
{NSErrorFailingURLKey=https://mydomain.com,
NSErrorFailingURLStringKey=https://mydomain.com}
Run Code Online (Sandbox Code Playgroud)
在AFURLConnectionOperation标题中我读到SSL Pinning与.cer证书一起使用但在我自己托管的OS X webserver中我有一个.crt证书.
这是问题吗?有没有办法让AFNetworking与.crt一起使用?
在Windows框中我将.crt转换为.cer并尝试将其捆绑到我的应用程序中,但我仍然得到相同的错误.即使在服务器端,我是否应该尝试使用新创建的.cer切换.crt文件?
jps*_*ain 20
我搞定了.
我当时正在创建一个自签名证书,以便从我的iOS应用程序中获取自己的服务器API.我用OpenSSL创建了我的证书.当我完成创建它时,我有几个文件,其中一个是"server.crt".最初,我尝试将其重命名为"server.cer",并为我的AFURLConnectionOperation对象使用"AFSSLPinningModeCertificate".这没用,我注意到这个例子使用了"AFSSLPinningModePublicKey",所以我试过了,但仍然没有运气.
所以我将我的文件(即重命名的".crt"文件)与他的文件进行了比较.
我注意到"server.crt"是base64编码的,像这样:
-----BEGIN CERTIFICATE-----
394230AFDFD...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
我注意到Mattt在AFNetworking中的例子中他使用的"adn.cer"文件不是base64编码的.它只是原始字节.所以,我这样做了:
$ base64 -D -i ./server.crt -o ./server.cer
Run Code Online (Sandbox Code Playgroud)
我将AFURLConnectionOperation设置为AFSSLPinningModePublicKey.
我把它放回到项目中并完成了我的iOS项目的清理和构建,一切正常.
希望这可以帮助!!
顺便说一下,你可能会注意到Xcode会显示你的".crt"或".cer"键的信息,无论是base64还是原始的,所以不要让你感到困惑.在任何一种情况下,您都应该能够看到证书数据,只是AF只接受原始(非base64)证书数据.
更新:
任何人都遇到了base64的问题,这对我在OS X上使用OpenSSL有用:
$ openssl base64 -d -in ./server.crt -out ./server.cer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10809 次 |
| 最近记录: |