通过https的排球请求仅适用于Wifi(wlan),但不适用于3G / GPRS(umts)

时间:2015-01-16 12:33:50

标签: android ssl https wifi android-volley

因为我被指示在我自己的问题中提出这个问题,所以我在这里这样做 要查看我第一次提出问题的Original Topic(现在已删除)。

我遇到了同样的问题,不幸的是,作者的答案没有帮助。

为了更详细地介绍我的问题,我使用Java 8(v8.0.25-JDK)在我的Tomcat 8(v8.0.15)服务器上使用自签名证书。我在那里托管我的Java EE应用程序,它是我的Android应用程序的后端。 Tomcat的SSL连接器可以正常工作。当我用RESTClient测试后端时,我得到了预期的结果 我用一个证书创建了密钥库:

keytool -genkey -alias tomcat -keystore tomcat.keystore 
-storepass MYKEYSTOREPASS -keyalg RSA -keysize 2048 -validity 365

然后我提取了证书:

keytool -export -alias tomcat -storepass MYKEYSTOREPASS 
-keystore tomcat.keystore -file tomcat.cer

最后,我为我的Android应用程序创建了一个BKS格式的新密钥库:

keytool -import -alias tomcat -file tomcat.cer -keypass MYKEYSTOREPASS 
-keystore tomcat.bks -storetype BKS -storepass MYKEYSTOREPASS 
-providerClass org.bouncycastle.jce.provider.BouncyCastleProvider
-providerpath $PATH_TO_BC_LIBRARY/bcprov-jdk16-146.jar
  

(如上所述here,“ - export”和“-import”参数来自之前的   发布但仍然可用。所以你也可以知道这个命令   参数为“-exportcert”和“-importcert”)

完成这些步骤后,我尝试连接,一切都很顺利。但只有在我停用/离开WLAN连接之前。然后它不再起作用并带来“javax.net.ssl.SSLPeerUnverifiedException:No peer certificate”。我真的不明白这种行为。

更多地照亮android方面:
我以完全相同的方式使用this tutorial中的类/库。

如果缺少某些内容,只需发表评论,我就会带上这些信息。

提前多多感谢!

2 个答案:

答案 0 :(得分:1)

在针对类似问题对服务器故障进行研究的同时,我得到了一个暗示: https://serverfault.com/questions/560733/why-isnt-tomcat-serving-the-correct-ssl-certificate 我用缺少的参数“keyAlias”尝试了它,它工作了!最终的解决方案 - 就像之前预期的Ogre_BGR一样 - 一个不是最佳的tomcat配置。连接器如下所示:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="PATH_TO_YOUR_KEYSTORE"
           keystorePass="PASSWORD_FOR_YOUR_KEYSTORE"
           keyAlias="ALIAS_OF_YOUR_CERTIFICATE"
           maxHttpHeaderSize="8192"
           />

当没有配置keyAlias时,Tomcat只会静默选择它在密钥库中找到的第一个密钥。在文档中提到here(在底部)。

我希望有一天有人会很高兴看到这个,同时遇到同样的问题。

再次感谢@Ogre_BGR:)

答案 1 :(得分:0)

我认为这只是一个服务器配置问题。我不确定Tomcat是如何工作的,但它可能类似于Apache,其中您声明一个虚拟主机用于“正常”请求(即非https)和一个虚拟主机用于HTTPS(包括SSL证书)。通常,每个虚拟主机绑定到一个IP。很可能当您通过WIFI访问服务器时,您会获得一些“内部”IP,如192.168。*,并且您可能已将虚拟主机配置为绑定到该IP。

当您通过3G访问时,您将通过“公共”网络,然后服务器的IP不同,因此虚拟主机不匹配,例如,未使用SSL证书,您将获得“无对等证书”。

我建议你必须检查服务器配置和日志,看看如何通过任何一种方法访问服务器。

相关问题