2010-04-20 104 views
2

我知道有很多關於如何忽略代碼中的SSL錯誤的問題/答案。JVM忽略證書名稱不匹配

在我們的開發區dev.domain.tld上,我們已經通過SSL配置了一個應用服務器。

顯示的證書用於somedev.domain.tld

沒有辦法更改證書,它將永遠是一個域不匹配。

所以當我部署一個web服務https://dev.domain.tld並嘗試連接/調用我的web服務我得到一個異常:

造成的: java.security.cert.CertificateException: 沒有名字匹配開發.domain.tld發現

我在我的信任存儲中有somedev.domain.tld CERT。

現在,我看到了很多樣本​​如何更改代碼(使用信託經理接受所有域),但我怎麼指定到JVM忽略域匹配連接到服務器時?有沒有-Djavax.net.ssl論點或什麼?

謝謝!

UPDATE:

或者,因爲我使用Spring-WS,有沒有辦法設置一些屬性在春天是什麼? (WebServiceTemplate)

UPDATE

我想我得從春季安全使用做什麼:http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html

回答

2

這在我的一個客戶端應用程序的工作對我來說,或許這也將爲工作你如果你是(或者Spring是內部的)在任何地方使用HttpsURLConnection。

HostnameVerifier hv = new HostnameVerifier() { 
    public boolean verify(String urlHostName, SSLSession session) { 
    log.warning(String.format("Warning: URL Host: '%s' does not equal '%s'", urlHostName, session.getPeerHost())); 
    return true; 
    } 
}; 

HttpsURLConnection.setDefaultHostnameVerifier(hv); 

儘管它幾乎沒有SSL的最佳做法。最好的解決方案是使用與主機名匹配的證書。