iOS WKWebView 自签名证书单向验证+双向验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS WKWebView 自签名证书单向验证+双向验证相关的知识,希望对你有一定的参考价值。

参考技术A 实现代理WKNavigationDelegate,找到如下方法,并实现

通过challenge.protectionSpace.authenticationMethod判断信任方式,对应的值为:

实现如下代理便完成了服务端验证,没有特殊需求实现如下方法页面即可正常展示

添加客户端验证的目的,主要还是觉得单向的服务端验证,不满足项目需求,还需要加入客户端验证,以保证项目的安全性,依项目实际需要使用即可

我个人在实际使用中遇到的问题,就是WKWebview默认缓存的问题,在开了代理的情况下,有时候可以打开有时候不可以打开

解决方式也很简单,先判断是否开启代理:

在加载的时候,使用不同的缓存策略:

手动验证 SSL 自签名证书签名 - javascript [重复]

【中文标题】手动验证 SSL 自签名证书签名 - javascript [重复]【英文标题】:Manually verify SSL Self Signed certificate signature - javascript [duplicate] 【发布时间】:2018-06-18 13:28:31 【问题描述】:

我正在尝试手动验证自签名证书,但过程不清楚。 我使用自己创建的 ca.crt 文件创建了一个自签名证书 server.cert

我将 server.key + server.crt 提供给我的 SSL 服务器。

现在,客户端假设如何验证 server.cert(假设服务器发送它 server.cert)?

据我了解,在创建 server.crt 时,ca 应该使用 ca 的私钥对 Hash(server.cert) 进行加密,而整个事情(包括签名)就是服务器证书。那么我将如何验证证书。我想我需要在客户端使用 ca.cert 吗?因为 ca.cert 还包含 ca.public 密钥,但是我需要对 server.crt 做什么才能说签名是正确的?

【问题讨论】:

【参考方案1】:

服务器需要提供由任何权威机构签署的适当证书。那个权威可能是你自己,没关系。问题是客户端默认不信任“你”。客户端信任其他 CA 证书的原因是它带有一长串已知且受信任的 CA;而“你”不在那个名单上。要进入该列表并获得信任,您需要将 CA 证书添加到本地信任存储中。通常这是由操作系统管理的,如何向其添加证书的详细信息会有所不同,但每个单独的应用程序(例如浏览器)也可能有自己的信任库而不使用操作系统的。

【讨论】:

我明白,但我的简单问题仅仅是:假设我捕获了服务器的证书(在 SSL 握手期间),验证这个证书的过程是什么?我知道证书中有一个加密的哈希(由 CA 生成),我会将它与什么进行比较?我需要以某种方式验证哈希加密,顺便说一句,我在我的“客户端”中“安装”了 CA 证书(不是真的,我是手动做的)。 您想详细了解根据受信任的 CA 证书验证证书的算法是什么......?!你最好阅读规范。对于实际的日常用例,您根本不用担心那种详细程度。如果您需要手动验证证书,您可以使用实现该检查的库(可能是在幕后绑定到 openssl 的东西)并为其提供正确的证书。我仍然不确定您的确切用例是什么,以及您何时“捕获”node.js 中的服务器证书。 如果 server.crt 是自签名证书,客户端仅拥有 CA 证书来验证 server.crt 是否足够?如果是这样,这怎么可能? server.crt 是用 CA 私钥签名的,那么拥有 ca Cert 和它的公钥有什么意义呢?有什么好比较的?我不认为这是需要阅读规范的太多细节,它只是需要了解的 SSL 基础 =) 所以这与自签名证书完全没有关系;当您作为客户所看到的只是公钥,而不是用于签名的私钥时,您只想知道证书验证是如何工作的。 另见security.stackexchange.com/a/116268 和那里的类似帖子。

以上是关于iOS WKWebView 自签名证书单向验证+双向验证的主要内容,如果未能解决你的问题,请参考以下文章

iOS 和 SSL:无法验证自签名服务器证书

iOS https请求对自签名证书忽略

手动验证 SSL 自签名证书签名 - javascript [重复]

验证设备的自签名证书

通过Authentication Challenge来信任自签名Https证书

自签名服务器根 CA 的 TLS 验证的 AFNetworking 问题