我正在使用modulus.io来托管我的应用。它们允许SSL捎带其通配符* .onmoulus.net证书,并且还使用您自己的特定于自定义域的证书。我一直在使用他们的证书并使用AndroidHttpClient实例连接到https://myapp.onmodulus.net,该实例工作正常,但在尝试在我自己的自定义域名上使用ssl时遇到了一些问题。
我已经为我的域购买并安装了thawte的证书,当我使用浏览器连接时,一切都很顺利。我看到了小锁图标,当我检查证书时,我正在使用我的解密证书,而不是* .onmodulus.net证书。在安装我自己的证书之前,它显示“此连接不受信任”警告,我可以看到正在使用* .onmodulus.net证书。
但是,当我尝试在我的Android应用程序中连接时,我的成功较少。打开网址并管理httpsURLConnection时如下:
URL myURL = new URL("https://www.myapp.com");
HttpsURLConnection myConnection = (HttpsURLConnection) myURL.openConnection();
try {
System.out.println("Response Code : " + myConnection.getResponseCode());
Certificate[] certs = myConnection.getServerCertificates();
for(Certificate cert : certs){
System.out.println("Cert Details: " + cert.toString());
}
一切顺利,网站响应正确,它显示我的解密证书,只使用我的解密证书。 * .onmodulus.net证书根本不显示。但是,当我尝试使用DefaultHttpClient进行连接时,如下所示:
DefaultHttpClient myClient = new DefaultHttpClient();
HttpGet getRequest = new HttpGet("https://www.myapp.com");
HttpResponse rawResponse = myClient.execute(getRequest);
我得到了:
javax.net.ssl.SSLException: hostname in certificate didn't match: <www.myapp.com> != <*.onmodulus.net> OR <*.onmodulus.net> OR <onmodulus.net>
我不确定如何更密切地检查证书,但现在它似乎使用通配符* .onmodulus.net证书而不是我的解密证书,我真的不明白为什么。我已经使用HttpClient实例编写了我的应用程序,所以我真的希望能够以这种方式连接,而不是像第一种解决方案那样使用。