我使用modulus.io來託管我的應用程序。它們允許在其通配符* .onmoulus.net證書上搭載SSL,並且還使用您自己的自定義特定於您的自定義域的證書。我一直在使用他們的證書,並使用AndroidHttpClient實例連接到https://myapp.onmodulus.net,該實例運行良好,但遇到一些問題,試圖在我自己的自定義域名上使用ssl。使用SSL時,HttpClient和HttpsURLConnection返回不同的證書
我已經爲我的域名購買並安裝了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());
}
everyting去罰款,該網站正確響應,並表明我的Thawte的證書,只有我Thawte的證書被使用。 * .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實例編寫了我的應用程序,所以如果可能的話,我更希望能夠以這種方式進行連接,而不是使用第一種解決方案之類的東西。
你也可以使用SNI和HttpClient:http://blog.dev001.net/post/67082904181/android-using-sni-with-apache-httpclient-library – junique