據我瞭解,在大多數情況下,這個例外狀態,證書擁有者CN(公用名稱)不匹配在URL中的主機名稱。然而,在我的情況下,它們匹配,但異常仍然引起..爲什麼我會得到「沒有找到匹配的名稱」CertificateException?
遠程服務器證書層次結構是:用CN=sms.main.ru
CN=client.sms.main.ru
簽署
- 自簽名證書
我的Java客戶端下的apache-tomcat的6推出,並嘗試連接到https://client.sms.main.ru/
及以下異常被拋出:
No name matching client.sms.main.ru found
兩個證書經由$JAVA_HOME/bin/keytool
加入$JAVA_HOME/jre/lib/security/cacerts
如在由unixtippse答案示於How do you configure Apache/Tomcat to trust internal Certificate Authorities for server-to-server https requests。
的Java代碼是相當簡單:
URL url = new URL(strurl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Connection", "close");
con.setDoOutput(true);
con.connect();
我缺少什麼?
有趣的是,當我嘗試在Windows PC上的瀏覽器訪問這個URL,它說,該證書不被信任,我將它添加到瀏覽器的例外列表,它工作正常。所以它看起來像我不正確地將這些證書添加到cacerts
,以便Java不能使用它們。但我可以很容易地通過別名或通過CN與找到他們:
$JAVA_HOME/bin/keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts | less
如果它是自簽名的,那麼它將不會被信任,因爲層次結構不會一直達到TA – 2014-11-07 02:10:41
@Scary Wombat但我將它們都添加到'cacerts'.....並在那裏標記爲可信這是不夠的?這不是應該如何讓自簽證書被信任嗎? – horgh 2014-11-07 02:13:11
您正在使用錯誤的類訪問https – CharlieS 2014-11-07 02:20:31