- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Android 中实现一个 WebView,它加载了一个 https 网站。在这个网站上,我想进行证书锁定,这意味着我想检查服务器所服务的证书的某些方面。但是我看到 WebViewClient 中没有任何方法可以让我拦截请求并检索证书。
在互联网上有很多人说它无法完成,证书固定在Androids WebView上。所以我希望这里的任何人都知道更多。
最佳答案
Android 中的证书固定
Android 上的证书固定在 this 中有很好的描述文章。
Android 中用于证书固定的主要里程碑是 Android 7.0 Nougat (SDK 24),因为 Network Security Configuration允许应用程序定义自己的规则集。
我建议使用 TrustKit Android library在 Android 上管理证书固定:它支持大多数库(OkHttp 等)并且与 Android SDK 24 设置兼容。
Webview 证书固定
但是请记住, Android 7.0 之前 无论您使用什么库,您都无法真正管理 Web View 上的固定,接下来的任何事情都是一种解决方法。
如果您有 minSDK 7.0 只需使用上面的库,无需执行任何其他操作。
shouldInterceptRequest 解决方法
Pre-Nougat 您对 Webviews 的最佳选择是实现您自己的 WebviewClient
并手动执行调用,在 shouldInterceptRequest()
中进行证书锁定方法。
您可以在 this project 中找到此类示例。 .shouldInterceptRequest()
Pre Lollipop (5.0 - SDK 21) 除了 URL,没有标题,没有正文,没有其他任何内容。这意味着除了加载 URL 并希望 webapp 不需要其他任何东西(标题等)之外,你真的不能做更多的事情。
由于 Lollipop,您有另一种方法可以为您提供 WebResourceRequest
对象具有更多信息,因此您可以正确地重现请求。
仅 GET 请求
不分安卓版本shouldInterceptRequest()
永远不会收到anything but GET requests ; POST/PUT/DELETE 不可拦截 !!
Lollipop 之前的性能问题
此外,如果您将上述方法与 shouldInterceptRequest()
一起使用您可以介绍major performance issues :before October 2015 Android Webview 有一个错误,并且总是在同一线程上执行该方法导致阻塞队列:同一线程用于 javascript,导致明显 "freeze" of the webview .自 Lollipop 以来,Webview 已随系统升级,但在此之前问题仍然存在。
拦截 PUT/POST/DELETE 的解决方法的解决方法
您可以注入(inject)自定义 Javascript 接口(interface)来拦截 Ajax 调用,并使用 OkHttp 或用于 HTTP 请求和证书固定的任何库手动执行它们。
如果你真的想走这条路have a look at this library ,它不支持表单,只支持 Ajax 调用,但可以用类似的方式完成,如 this other library 所示。 .
但!!!我根本不推荐这个!!!!作者本人,我引用,说:
[..]I wasn't happy with my adaption of this so far.[...]
shouldInterceptRequest()
中请求它们时您不必提取它们。方法。这要求您已经知道您需要的所有资源,我不必告诉您它最终可能会使用用户可能永远不会使用的大量带宽和磁盘空间。
shouldInterceptRequest()
的替代方案
shouldInterceptRequest()
的组合。和HPKP。
关于android - Webview 证书固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33932507/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 6 年前。 Improv
我们最近构建了一个 Web 生成器应用程序(所见即所得、预先设计的模板、购物车等)。我们一直在寻找 SSL 证书的几个不同选项,甚至是通配符,以寻求解决方案。问题是我们不想每次有客户想要将 SSL 添
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 6 年前。 Improve
我想这是不可能的,但如果是这样,我想知道为什么。 假设我从附近的官方证书颁发机构之一获得了 example.com 的 SSL 证书。假设我正在运行 a.example.com 和 b.c.d.exa
在我的 java 应用程序中,我有一个带有自签名证书/ key 的 JKS keystore 。我需要加载它们并将它们转换为 BouncyCaSTLe 类型。 我正在使用 java.security.
我不是这方面的专家,但我只是遵循 Android 开发者网站上列出的代码 keytool -genkey -v -keystore orbii.jks-keyalg RSA -keysize 2048
我正在为我的一个应用程序实现推送通知系统,所以我正在关注 this教程并为此生成 SSL 证书。 我的这个应用程序还涉及应用程序和服务器之间的一些数据交换,我希望它受到 SSL 保护,我想知道从 ve
可能这是重复的问题,但我没有从上一个问题中完全清楚,这就是我发布新问题的原因。请看看这个。我会将 Ca 证书放在我的资源文件夹中以验证 ca 认证的证书,服务器中也会有相同的 ca 证书。 我正在创建
首先,我想指出这在 Internet Exporer 11 上运行良好。但出于某种原因,我无法让 FireFox 正常运行! 所以我已经添加了我自己的 rootCA 安全证书,在 Internet E
我有域“www.example.com”的 SSL 证书,我已将此证书安装在运行良好的端口 80 上的 tomcat 服务器中。现在我的要求是在 https 中运行 php 代码,因为我的 Apach
我正在构建一个 oauth 1.0a 服务,它将被 Jira 中的一个小工具使用,它是一个用 C# 编写的 .Net 3.5 应用程序。 Jira 使用 RSA-SHA1 签名方法向此服务发出请求,这
假设用户打开 https://ssl-site.example/link/index.php我用 ProxyPass 配置了我的服务器和 ProxyPassReverse在 Apache 配置中(在
我有一个 tcp 服务器,它使用证书进行 ssl/tls 和许可。对于 ssl/tls,证书存储在 pkcs#12 文件中,我认为该文件将作为安装过程的一部分进行安装。 关于 Rhino 许可,作为安
我开始想第一次在 jmeter 中记录。 我的步骤是: 我在 mac 上安装了 jmeter:brew install jmeter 我创建了新的录音模板 我点击开始按钮。它显示如下图所示的弹出窗口。
通常,我的困惑似乎正在从我在WCF上下文中理解安全性的尝试中消除。在WCF中,似乎可以将证书用于身份验证和加密。基本上,我试图理解: 如何将X509证书用作身份验证令牌? ssl证书通常不公开吗?这是
我正在尝试使用 openssl 库让客户端通过 https 连接到某些服务器。 调用堆栈是这样的: SSL_library_init(); SSL_load_error_strings(); SSL_
我正在阅读 this article其中解释了 iOS/OSX 中的代码签名。 我知道从KeyChain Access utility 我可以看到我的证书,如果展开我的开发者证书,我可以看到有一个私钥
我有一个既在互联网上又在私有(private)网络上的服务器。 我正尝试按照我的经理的要求在内部专用网络上设置 TLS。 该服务可供 Internet 和私有(private)内部网络客户端使用。 外
我在具有不同域扩展名的单个网络服务器中设置了我的站点,例如 https://mybusiness.com https://mybusiness.com.au https://mybusiness.co
我正在开发一个移动应用程序。我是网络开发的新手。 我在 GoDaddy 上有 DNS(比如 app.test.com)并且有一个只有 IP 地址的服务器(比如 31.254.42.73)。我的请求从
我是一名优秀的程序员,十分优秀!