5

在我的项目中,我们使用的是封闭源代码框架(Backbase,如果你想知道的话)。这是一个混合应用程序框架,提供了许多“开箱即用”的安全选项。其中之一是证书固定,我对它的实现很感兴趣。

我们只需要在配置文件中设置一个属性就可以了。通过框架完成的每个请求都通过URLSession.shared框架进行处理,并且固定是有效的。但是,如果我实例化自己的URLSession,则固定无效。但我也可以URLSession通过使用框架的NSURLSessionConfiguration.

对于那些只阅读代码的人:

// Pinning effective
URLSession.shared.dataTask(with: request, completionHandler: completion)

// Pinning not effective
URLSession(configuration: .default).dataTask(with: request, completionHandler: completion)

// Pinning effective
URLSession(configuration: ShinnyFramework.getConfiguration()).dataTask(with: request, completionHandler: completion)

对我来说,URLSession.shared它是不可变的,所以不可能改变它的工作方式。URLSession而要实现固定,唯一的方法是使用自定义创建一个新的URLSessionDelegate.

我的问题是:他们做了什么来获得这种行为?Method swizzling,Isa swizzling,还有别的吗?

编辑:我不是在寻找有关如何实施证书固定的详细说明。我更感兴趣的是如何编辑一个假定为不可变的静态属性,以及如何在URLSession不使用委托的情况下配置对象的行为。

4

0 回答 0