首页>技术支持>最新数字证书问答 >如何正确设置AFNetworking HTTPS连接

如何正确设置AFNetworking HTTPS连接

如果APP用了Web Server,我们需要防止数据嗅探,防止中间人利用伪造证书窃取流量,保护数据安全,这就需要为APP设置HTTPS加密连接苹果iOS9已经要求开发者将所有HTTP协议全部升级为HTTPS协议。本文将介绍如何正确使用AFNetworking中的SSL功能,保护APP数据安全?

SSL/TLS协议的作用

不使用SSL/TLS的HTTP通信,就是不加密的通信!

>>HTTP明文传输,带来了三大风险:

窃听风险:第三方可以获知通信内容

篡改风险:第三方可以修改通信内容

冒充风险:第三方可以冒充他人身份参与通信

>>SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

所有信息都是加密传输,第三方无法窃听

具有校验机制,一旦被篡改,通信双方会立刻发现

配备身份认证证书,防止身份被冒充

HTTPS的原理

HTTPS,是HTTP over SSL的意思,就是在HTTP明文通道的基础上,增加一层SSL加密通道。SSL/TLS协议是用于解决传输层安全问题的网络协议,其核心是基于公钥密码学理论实现了对服务器身份认证、数据的加密保护以及对数据完整性的校验等功能,确保传输数据的机密性和完整性,以及服务器身份的真实性。

HTTPS的原理,SSL原理

获取SSL安全证书

APP设置HTTPS加密连接,需要先向权威CA机构(如沃通CA)申请Web服务器SSL证书,NSURLSession 支持 cer 格式的证书文件,但是一般从管理员手里拿到的都是 crt 格式的证书,需要先转换成 cer 格式证书。

需要注意的是,如果开发者为了节省证书费用,而使用自签名SSL证书用于实现HTTPS连接,这是非常危险的!自签名SSL证书不受系统信任,容易被仿冒或篡改,受到中间人攻击。拓展:为什么部署自签SSL证书非常不安全

沃通CA提供全球信任的基础级免费SSL证书,支持2年期5个域名,让开发者能够零成本实现APP的HTTPS升级,还提供安全性及兼容性更强的高级别SSL证书

将SSL证书加入你的项目

将你的SSL证书拖拉放到 Xcode工程,记得要把 Copy items if needed 跟 Add to targets 打勾。

AFNetworking设置SSL证书

设置 AFNetworking

AFNetworking, iOS开发中,以其优雅的结构设计和简便的调用方式,使其成为了最流行的网络开源库之一。AFNetworking 的安全相关设定放在AFSecurityPolicy,它定义了三种 SSLPinning Mode:

设置 AFNetworking

关于 pinning mode,简单的说就是你可以将SSL证书跟你的 APP 一起打包,藉由此机制来避免中间人伪造SSL证书的风险。

AFSSLPinningModeNone : 代表客户端无条件地信任服务器端返回的证书AFSSLPinningModePublicKey : 代表客户端会将服务器端返回的证书与本地保存的证书PublicKey的部分进行校验;如果正确,才继续进行。

AFSSLPinningModeCertificate : 代表客户端会将服务器端返回的证书和本地保存的证书中的所有内容,包括PublicKey和证书部分,全部进行校验;如果正确,才继续进行。

那要选用何种模式比较好呢?

AFSSLPinningModeCertificate 比较安全但也比较麻烦,它会比对你打包的SSL证书跟服务器的SSL证书是否一致。因为你的SSL证书是跟 APP 一起打包的,这也就代表说如果你的SSL证书过期了或是变动了,你就得出一版新的 APP 而且旧版 APP 的SSL证书就失效了。你也可以在每次 APP 启动时,就自动连到某个服务器下载最新的SSL证书,不过此时这个下载联机就会是有风险的。

AFSSLPinningModePublicKey 则是只有比对SSL证书里的 public key,所以即使服务器证书有所变动,只要 public key 不变,就能通过验证。

所以如果你能确保每个使用者总是使用最新版本的 APP(例如是公司企业内部专用的),那就可以考虑 AFSSLPinningModeCertificate,否则的话选择 AFSSLPinningModePublicKey 是比较实际的作法。

部分内容参考来源Nelson Blog,文章链接:http://www.wosign.com/FAQ/faq-afnetworking-https.htm

推荐关注:upyun ssl配置 | Linux+Apache下安装SSL证书 | Kangle服务器部署SSL