如何在 SFSafariViewController 上实现 SSL Pinning?

Posted

技术标签:

【中文标题】如何在 SFSafariViewController 上实现 SSL Pinning?【英文标题】:How to implement SSL Pinning on SFSafariViewController? 【发布时间】:2017-03-08 01:58:21 【问题描述】:

在我的应用程序中,我在AFNetworking 的帮助下为我的所有 REST 请求设置了 SSL Pinning。这有助于防止 MITM 攻击。当我使用 Charles 代理作为“中间人”测试我的应用程序时,请求按预期失败。但是,我通过 SFSafariViewController 的登录流程(Oauth 2.0)并非如此。那是因为……这个登录过程与AFNetworking无关。

如果有办法在 SFSafariViewController 上实现 SSL Pinning,我相信这个问题可以解决。

1) 有没有办法做到这一点?我在网上找不到任何关于此的内容。 2) 人们有哪些方法可以解决这个问题?好像是安全问题。

【问题讨论】:

我很好奇您是否发现了关于这个主题的任何有趣的东西? 不幸的是,我不记得曾经找到解决此问题的方法!不过,我已经在很久以前研究过这个了 @GabrielPires 你找到解决方案了吗?我现在也有同样的情况。 @AuRis,对不起,伙计!自从我发布问题以来,我没有看过这个问题。不幸的是,当时我还没有找到解决方案。现在已经快两年了,也许有人找到了解决方案。 【参考方案1】:

对我来说,以下评论是有道理的。 没有办法在 SFSafariViewController 中进行任何 SSL 固定,原因有两个:

    SFSafariViewController 类不提供任何 API 自定义 SSL 验证和处理身份验证挑战。 使用时,SFSafariViewController实际上是在一个单独的 进程和应用程序的代码根本无法访问它。因此 swizzling 不会影响 SFSafariViewController,因为它只是 发生在应用程序的进程中。

参考:- https://github.com/datatheorem/TrustKit/issues/163

【讨论】:

【参考方案2】:

您可以使用WKWebView (WebKit) 并创建您自己的SFSafariViewController 版本,该版本在您使用SFSafariViewController 的位置具有您的pin,但您不能在SFSafariViewController 中使用证书pin。如果您使用SFSafariViewController 下载配置文件,那么您将被卡住,不允许证书固定,WKWebView 不会“存储”用于安装的配置文件,据我所知,只有 Safari.app 和 SFSafariViewController 可以做到这一点.

【讨论】:

以上是关于如何在 SFSafariViewController 上实现 SSL Pinning?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?