我正在使用modules.io来托管我的应用程序。他们允许 SSL 搭载在他们的通配符 *.onmoulus.net 证书上,并且还允许使用您自己的特定于您的自定义域的证书。我一直在使用他们的证书并使用运行良好的 AndroidHttpClient 实例连接到https://myapp.onmodulus.net ,但是在尝试在我自己的自定义域名上使用 ssl 时遇到了一些问题。
我已经为我的域购买并安装了来自 thawte 的证书,当我使用浏览器连接时,一切正常。我看到了小锁图标,当我检查正在使用的证书时,它是我的解冻证书,而不是 *.onmodulus.net 证书。在安装我自己的证书之前,它显示“此连接不受信任”警告,我可以看到 *.onmodulus.net 证书正在被使用。
但是,当我尝试在我的 android 应用程序中连接时,我的成功率较低。当打开一个 url 并像这样管理 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 证书而不是我的 thawte 证书,我真的不明白为什么。我已经使用 HttpClient 实例编写了我的应用程序,因此如果可能的话,我真的希望能够以这种方式进行连接,而不是使用类似于第一个解决方案的东西。