苹果官方最新消息:原定于2017.1.1强制的https被延期了,但是具体到什么时候不确定,等官方通知:
但是https我们势在必行,那么真正需要我们做的到底是什么呢?一般分为两种情况:
1.如果我们用的是付费的公信机构颁发的证书,标准的https,那么无论我们的客户端用的是AFN或者原生的NSUrlSession,我们什么都不用做,代理方法也不用实现,网络请求就能正常完成。
2.如果我们用的是自签名的证书:
* 首先需要在plist文件中,设置可以返回不安全的请求(关闭该域名的ATS)。
* 其次,如果我们使用的是NSUrlSession,那么需要我们在代理方法实现:
如果是AFN,则需要设置policy:
把证书倒进工程之后在AFN里设置
总结一下https的验证流程:
就是用户发起请求,服务器响应后返回一个证书,证书中包含一些基本信息和公钥。
用户拿到证书后,去验证这个证书是否合法,不合法,则请求终止。
合法则生成一个随机数,作为对称加密的密钥,用服务器返回的公钥对这个随机数加密。然后返回给服务器。
服务器拿到加密后的随机数,利用私钥解密,然后再用解密后的随机数(对称密钥),把需要返回的数据加密,加密完成后数据传输给用户。
最后用户拿到加密的数据,用一开始的那个随机数(对称密钥),进行数据解密。整个过程完成。