如何从代理后面的Android应用程序通过HTTPS访问服务?

时间:2015-07-24 08:16:50

标签: android security ssl https proxy

我的Android应用通过HTTPS进行一些网络服务调用。因此,代理后面的用户(主要是在公司网络中)无法使用该应用程序。所以我添加了一个自定义HostnameVerifier:

HostnameVerifier hostnameVerifier = new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
};

这解决了问题,但也向MITM攻击者发送了一个公开邀请。我应该向HostnameVerifier添加什么样的检查?我还遇到了使用自定义TrustManagers并在那里添加我的证书的建议 - 但没有人谈到如果我更新我的服务器证书将会发生什么 - 除非我用新的推送应用程序更新,否则用户将无法使用该应用程序SSL证书(他们下载应用程序)。

简而言之,我的问题是如何在代理后面访问应用程序,但不容易受到MITM的影响。还是不可能?如果不可能,我们是否"泄漏"如果使用代理服务器后访问银行网站时我们的密码?

1 个答案:

答案 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拦截,那么如果您在代码中添加了一些特殊的例外,则不是。