您的位置:首页 > 其它

YTKNetWork源码解析——针对SSL自产证书认证如何随心所欲的游走在IP和域名之间并开启想要的验证

2017-07-22 22:04 459 查看
YTKNetWork源码解析——

针对SSL自产证书认证如何随心所欲的游走在IP和域名之间并开启想要的验证

最近在进行遇到个比较奇葩棘手的问题,下面进行场景介绍:

1、  只有测试环境:ip地址,之后用 地址A替换

2、  生产环境:域名,之后使用地址B替换

3、  不管是地址A还是地址B都需要使用SSL资产证书验证,如果使用的是B地址需要开启域名验证

4、  应用程序如何走地址A,B需要通过使用A地址的返回值来确定如何走哪类?

在这样的情况下的,首先我们得保证我们的SSL资产证书必须要能够同时对A和B校验。

场景一:

           刚进来我们会走B地址进行借口呢请求,如果请求成功那么是完全可以进行A地址请求

这个原因主要还是由于我们在开始的时候对manager创建是在请求值回来之后,我们创建的manager的securityPlocity 中的属性是信任自产证书,域名验证不开启,这样就导致论文我们的场景一。

场景二:

           刚进来我们进行断网模拟,B接口请求失败,那么在我们进行操作的时候如果现在想去请求A接口的数据,请求不到,因为B开启了域名验证我们A是地址这样我们就无法继续进行下面的操作了,那怎么处理呢?

           这个原因我们就要进行深究YTKNetwork的底层代码了,在YTKnetwork中网络请求是个单例,第一次创建的时候,读取了config来进行配置。这个库主要使用了命令模式:主要有两个类,一个request为命令,另一个是ytknetworkagent。

ytknetworkagent也就是执行命令的对象,在第一次网络请求时,会读取你设置的配置信息后边再请求,就不会读取了。因为他使用的是单例模式,当我们在第一次请求失败之后,其实对象已经建立了,之后我们在进行A地址请求的时候,我们拿到的配置信息是对B的请求配置信息(开启域名验证,开启SSL自产证书认证),这套信息已经完全不能对A起作用了。有人就会问了,我们直接在开始请求B的时候对他的信息配置信息更改,就可以解决呀?小编也进行了对应的测试修改,没毛病,配置信息可以修改,但是还是不能请求。这个问题我们就要进行追踪底层库的代码,在对应的配置信息我们看到了config中的属性已经完全非被改了,他的信息和我们需要进行请求的A地址我们需要的信息完全一致。但是当我们在对管理员进行查看的时候我们就会发现,又问题了。这是什么原因导致的呢,只是因为执行命令的对象只创建了一次,而且在创建之后我们不能进行修改他的属性。这个具体大家去看代码吧。但是我们有需求怎么解呢,这个就只能对我们执行对象做修改,我们需要把manager以属性的方式提出来,这样我们在修改配置信息的时候我们可以进行对对象管理者进行修改,就会达到我们想要的目的,完全可以通过他随心所欲的在ip和域名之间进行游走,进行各种奇葩的验证处理。

           代码暂时没有贴图,不懂的可以联系小编共同学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息