ios开发ssl,iOs开发swift全局变量

iOS 10.3下解决Charles抓包ssl证书信任问题

最近iPhone系统更新到iOS 10.3后,在公司里用Charles抓包竟然出现了一些问题,https的请求都会失败,提示错误信息为 Failure SSLHandshake: Received fatal alert: unknown_ca 和 You may need to configure your browser or application to trust the Charles Root Certificate. 然而之前任何问题都没有,并且相关设置都正确:Mac上安装了Charles的根证书,并且设置了始终信任,然后手机上也登录了 安装了描述文件,一切都按正常程序走的,但是错误始终无法解决.这里Charles的相关使用不做介绍,不会使用的请参考本文结尾处唐巧大大的博文.

湖里ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

虽然charles的根证书已经在安装列表中显示,但它是被关闭的。在iOS 10.3之前,当你将安装一个自定义证书,iOS会默认信任,不需要进一步的设置。而iOS 10.3之后,安装新的自定义证书默认是不受信任的。如果要信任已安装的自定义证书,需要手动打开开关以信任证书。

设置-通用-关于本机-证书信任设置- 找到charles proxy custom root certificate然后信任该证书即可.

问题虽小,但是很有必要普及一下.这个设置证书信任的开关界面隐藏的很深,是iOS 10.3之后出现的(貌似是,至少之前我没见过).这个问题因此也只有在iOS 10.3的设备上才会出现,真是太意外了!因此作为iOS开发者,更新手机系统时,了解一下系统更新的相关内容也变得很有必要.

Charles 从入门到精通 - 唐巧的技术博客

TRUSTING CUSTOM ROOT CERTIFICATES ON IOS 10.3

在iOS中创建及使用自签名SSL证书应该注意什么

自签名的证书不会被信任(项目不能开展),建议申请商用可信SSL证书。

iOS 中HTTPS 的使用

谣言四起,大限将至。各种谣言皆因苹果开发者大会开始,从那个时间开始,都说2017年1月1日为HPPTS即将开始的日子。从此大航海时代就要开始了。从此就成了我挥之不去的心魔,吓得本大少和服务器端调呀调。总算调好了。好吧,我们聊聊HTTPS。

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。(摘自百度百科)

PKI(公钥基础设施)技术是HTTPS的基础,PKI与非对称密钥加密技术密切相关,包括消息摘要、数字签名和加密服务,而数字证书以及证书机构(CA – Certificate Authority)是PKI中的重要概念。

iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输。这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输。

一般我们如果还是使用的http,不更新的话,可通过在 Info.plist 中声明,倒退回不安全的网络请求

首先找后台要一个证书(SSL证书,一般你跟后台说要弄https,然后让他给你个证书,他就知道了),

我们需要的是.cer的证书。但是后台可能给我们的是.crt的证书。

我们需要转换一下:打开终端 - cd到.crt证书路径 - 输入openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der

证书就准备好了,拖入工程,记得选copy。一般叫做servicer.cer

--此段引用自大神 vision_colion 的文章,他文章里面有单向认证的哦。

然后我们还得需要一个client.p12证书.还是问服务器端给。

苹果官方文档

lanp74的博客

iOS开发 为app配置代理

由于对某款app的租房信息的筛选条件不满意,所以爬取了它的api以便能够根据自己的需求进行筛选。根据自己的初级爬虫经验,为了防止app封禁我的ip,所以准备通过代理服务器去访问。

过程是相当纠结啊,尝试的太多,这里就只放结论了。

笔者使用的 URLSession ,初始化前配置 URLSessionConfiguration 对象的 connectionProxyDictionary 即可。

特别提醒: host 类型为 String , 而 port 类型为 Int .

ps:使用http时,需要添加ATS白名单

注: 两种代理方式貌似不能同时使用。不确定是因为我测试时上一秒代理还好好的,下一秒就挂了。

一般服务器对于爬虫是不欢迎的。真正的用户操作再快都需要一定的时间,而爬虫访问时间很短,因此相当规模的爬虫对服务器造成的负担就更大。所以服务器会对爬虫做检测,如果被抓到则可能被封掉ip或像本例一样返回其他网站。

针对检测,我们的做法就是要伪装成真正的用户。以笔者目前的理解有两点:

1. 修改请求头。通过Charles抓包可以看到一次请求的头部信息,对照修改

2. 设定访问延时。手速再快你也快不过自动运行的程序吧。

参考链接:

ps: 一个不错的爬虫学习系列

过程中遇到最多的就是1200错误码:无法与服务器建立安全连接。网上大多数意见是服务器SSL版本不够,因为iOS最低要求使用TLSv1.2的版本。对于更低一点的,就需要特别指定版本。( 由于我这里是代理字典https key用错了,才导致的1200。所以只能先在这mark一下 )

以下是网上给出的解决方法:

这是一个测试TLS的控制台命令:

nscurl --ats-diagnostics --verbose

这里能自动测试哪种key能通过,随便找个https的网站试一下吧。

附上 connectionProxyDictionary keys 参见 Table 3-7


分享文章:ios开发ssl,iOs开发swift全局变量
分享URL:http://scyanting.com/article/dscepsh.html