SSL与AFNetworking钢钉(SSL Pinning with AFNetworking)

2019-09-04 02:30发布

在我的应用我使用HTTPS和自签名证书来保护我的客户端和服务器之间的连接。

我是想有AFNetworking库做SSL寄托在我的证书中的应用程序捆绑在一起的副本。

AFURLConnectionOperation头我定义两个:

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ =1
#define _AFNETWORKING_PIN_SSL_CERTIFICATES_ =1

并调用之前start对我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钢钉可与.CER证书,但在我的自托管OS X网络服务器我有一个.CRT证书。

这是什么问题? 有没有一种方法,使AFNetworking工作,.CRT?

在Windows中我将我.CRT以.CER并试图捆绑到这一点我的应用程序,但我仍然得到同样的错误。 我应该尝试将.crt文件切换与新创建的.CER甚至在服务器端?

Answer 1:

我得到它的工作。

我是在我已经创造了从我的iOS应用程序打我自己的服务器API自签名证书的情况。 我建立了我的证书与OpenSSL的。 当我完成创建它,我有几个文件,其中之一是“server.crt这”。 起初,我尝试了将其改名为“server.cer”,并使用“AFSSLPinningModeCertificate”我AFURLConnectionOperation对象。 没有工作,我注意到例子中使用“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项目,一切运行良好。

希望这可以帮助!!

顺便说一句,您可能会注意到的Xcode将显示信息,为您的“.CRT”或“.CER”键,无论是一个base64或原料之一,所以不要让这种迷惑你。 你应该能够看到在这两种情况下的证书数据,它只是AF将只接受原始(非的base64)之一。

更新:
其使用Base64困难的人,这对我来说是什么在起作用使用OpenSSL的OS X:

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


Answer 2:

如果您使用AFNetworking 2.x和你使用了正确的.CER但您的通话仍收到错误代码-1012,你应该禁用validatesCertificateChain

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];
securityPolicy.validatesCertificateChain = NO;

或者您也可以通过这一切在整个证书链pinnedCertificates



Answer 3:

您的证书必须具有扩展CER不CRT和应该在.der格式。 输出文件添加到您的Xcode项目。

您可以使用下面的命令:

OpenSSL的X​​509 -in your.crt退房手续certificate_cer.cer -outform德



文章来源: SSL Pinning with AFNetworking