我的Android应用通过HTTPS进行一些网络服务调用。因此,代理后面的用户(主要是在公司网络中)无法使用该应用程序。所以我添加了一个自定义HostnameVerifier:
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
这解决了问题,但也向MITM攻击者发送了一个公开邀请。我应该向HostnameVerifier添加什么样的检查?我还遇到了使用自定义TrustManagers并在那里添加我的证书的建议 - 但没有人谈到如果我更新我的服务器证书将会发生什么 - 除非我用新的推送应用程序更新,否则用户将无法使用该应用程序SSL证书(他们下载应用程序)。
简而言之,我的问题是如何在代理后面访问应用程序,但不容易受到MITM的影响。还是不可能?如果不可能,我们是否"泄漏"如果使用代理服务器后访问银行网站时我们的密码?
答案 0 :(得分:1)
一个简单的http代理不会对https通信进行任何更改,因此只要代理按照应该使用的方式使用,即所有内容都可以在不更改证书验证的情况下工作,即配置为浏览器的代理并且不使用作为jQuery(".navcontent li").on('mouseenter', function(event) {
jQuery('.navcontent li .childmenu').removeClass("child-active");
jQuery(event.target).addClass("child-active");
});
等特殊网址。
然后有代理和防火墙进行SSL拦截以扫描恶意软件等的加密连接。在这些情况下,证书的主机名通常匹配,但发行者是不同的,并且不受操作系统信任。在这种情况下,必须将此颁发者CA证书作为受信任导入OS。对于Android,这是一个中心设置,不依赖于应用程序。
您永远不应该简单地禁用部分证书验证以使用户更容易,因为您随后打开了针对中间人攻击的应用程序。如果使用预期的代理方式,并且用户明确信任公司SSL拦截,那么如果您在代码中添加了一些特殊的例外,则不是。