ios – SSL固定与AFNetworking

前端之家收集整理的这篇文章主要介绍了ios – SSL固定与AFNetworking前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的应用程序中,我使用https和自签名SSL证书来保护我的客户端和服务器之间的连接.

我试图让AFNetworking图书馆在应用程序中捆绑我的证书的副本上进行SSL固定.

在AFURLConnectionOperation标题中我定义了两个:

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ =1
#define _AFNETWORKING_PIN_SSL_CERTIFICATES_ =1

在我的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}

在AFURLConnectionOperation标题中,我读到SSL Pinning与.cer证书一起使用,但在我的自我托管OS X webserver中,我有一个.crt证书.

这是问题吗?有没有办法使AFNetworking与.crt一起工作?

在Windows框上,我将.crt转换为.cer,并尝试将其捆绑到我的应用程序中,但我仍然收到相同的错误.我应该尝试用新创建的.cer甚至在服务器端切换.crt文件

解决方法

我得到它的工作

我处于这样的情况,我已经创建了一个自我签发的证书,以从我的iOS应用程序打到我自己的服务器API.
我用OpenSSL创建了我的证书.当我完成创建它,我有几个文件,其中之一是“server.crt”.最初,我尝试将其重命名为“server.cer”,并为我的AFURLConnectionOperation对象使用“AFSSLPinningModeCertificate”.这没有工作,我注意到这个例子使用“AFSSLPinningModePublicKey”,所以我试过,还是没有运气.

所以我比较我的文件(这是更名为“.crt”文件)给他.
我注意到“server.crt”是base64编码的,像这样:

-----BEGIN CERTIFICATE-----
394230AFDFD... 
-----END CERTIFICATE-----

我注意到Mattt在AFNetworking中的例子,他使用的“adn.cer”文件不是base64编码的.它只是原始字节.
所以我做到了这一点:

$base64 -D -i ./server.crt -o ./server.cer

我将AFURLConnectionOperation设置为AFSSLPinningModePublicKey.
我把它放回了项目,并做了一个干净和建立我的iOS项目,一切都正常.

希望这可以帮助!!

Btw,您可能会注意到,Xcode将显示您的“.crt”或“.cer”键的信息,无论它是base64还是原始密钥,所以不要让这混淆.您应该可以在任何一种情况下看到证书数据,只是AF仅接受原始(非base64)证书数据.

更新:
任何人在使用base64时遇到麻烦,这对于使用OpenSSL的OS X在我有用:

$openssl base64 -d -in ./server.crt -out ./server.cer

猜你在找的iOS相关文章