如何阻止不受信任的证书?
Posted
技术标签:
【中文标题】如何阻止不受信任的证书?【英文标题】:How to block untrusted certificates? 【发布时间】:2013-05-20 11:58:37 【问题描述】:我有 SSL 连接。如果我使用 feddler 或 Charles 应用程序,我可以看到解密的 SSL 数据。我怎样才能防止这个错误?
更新: 我没有为 Charles 导入证书,我的 android 设备已植根,我使用 Proxy Droid 应用程序并允许不受信任的应用程序。进行此操作后,我可以看到解密的数据。我要屏蔽这个bug...
更新2: 我使用类 EasyX509TrustManager.java (apache) 来检查证书。您可以看到 void checkServerTrusted。如果我使用“certificates[0].checkValidity();” - 证书始终有效,但如果我使用“standardTrustManager.checkServerTrusted(certificates, authType);” - 证书可以是有效的(charles 关闭)或无效(charles)。没有“证书[0].checkValidity();”它工作正常,但我不确定这是否正确。
【问题讨论】:
您能否更清楚地了解您要阻止的内容(以及可能的原因)。您提到的两个应用程序是网络调试代理,不能用于破解您的用户数据,因为您必须将应用程序直接指向它们。 是你的应用吗?您是否首先绕过证书验证? 是的,它是我的应用程序。我想阻止这种“黑客行为”,但不允许所有证书。 【参考方案1】:如果您尚未导入 Charles 或 Fiddler 的证书,并且您仍然可以看到来自您设备的流量,这意味着您没有正确使用 HTTPS。您需要配置您的代码,以便它对用于保护 HTTPS 连接的证书执行正确的链检查。在大多数语言/框架堆栈中,这会自动发生,您必须设法覆盖它。
您使用什么语言/框架,您使用什么对象来发送请求?
如果您已将调试器的证书导入设备,则默认情况下,大多数语言/框架将认为它是受信任的。为防止这种情况发生,您的代码在允许通信继续之前大多数手动评估来自服务器的证书链。这种技术称为“证书固定”。
【讨论】:
我使用类 EasyX509TrustManager.java (apache) 来检查证书。您可以看到 void checkServerTrusted。如果我使用“certificates[0].checkValidity();” - 证书始终有效,但如果我使用“standardTrustManager.checkServerTrusted(certificates, authType);” - 证书可以是有效的(charles 关闭)或无效(charles)。但我认为,它没有解决我的问题? 没有“证书[0].checkValidity();”它工作正常,但我不确定这是否正确。以上是关于如何阻止不受信任的证书?的主要内容,如果未能解决你的问题,请参考以下文章