Android:无线接入点会话超时和主机名验证错误

Android:无线接入点会话超时和主机名验证错误,android,ssl,android-networking,retrofit,okhttp,Android,Ssl,Android Networking,Retrofit,Okhttp,我遇到的情况是,我所在的公司网络有一个无线接入点,需要安全登录才能访问网络。约30分钟的空闲时间后,它将提示用户重新验证 在我的应用程序中(使用改型+okhttp),“您的会话已超时”显示为“java.io.IOException:Hostname'example.com'未验证”异常。仔细检查表明,“example.com”正在根据无线接入点的证书进行验证,与证书关联的唯一有效域是接入点的域(securelogin.arubanetworks.com)。这就是触发异常的原因。如果我离开应用程序

我遇到的情况是,我所在的公司网络有一个无线接入点,需要安全登录才能访问网络。约30分钟的空闲时间后,它将提示用户重新验证

在我的应用程序中(使用改型+okhttp),“您的会话已超时”显示为“java.io.IOException:Hostname'example.com'未验证”异常。仔细检查表明,“example.com”正在根据无线接入点的证书进行验证,与证书关联的唯一有效域是接入点的域(securelogin.arubanetworks.com)。这就是触发异常的原因。如果我离开应用程序,启动浏览器,重新验证接入点并返回应用程序,我仍然会遇到相同的主机名未验证问题。这给我留下了两个问题:

1) 除了等待和处理IOException之外,还有更好的方法来检测这种超时情况吗

2) 会话超时后,我似乎无法让http客户端停止尝试根据访问点证书验证主机名。是否有一种方法可以在用户重新验证(通过浏览器)后恢复,而无需重新启动应用程序

  • 没有一个很好的方法来处理捕获的访问点。我能想到的最好办法是在一个已知的HTTP地址()上托管已知的内容,并查看到这个域的HTTP请求是否被重定向到域外。这似乎是MacOSX用来检测捕获接入点的功能;它使用apple.com上的一个页面

  • 我怀疑是DNS缓存,而不是HTTP客户端,导致您在重新尝试时感到悲伤。一旦SSL握手失败,HTTP客户端将无法保持连接。您需要配置捕获门户的DNS以设置非常短的TTL