2015-03-03 81 views
0

我們有一個進程使用HttpClient使https與不同的URL連接。我們的JDK版本是1.7。我們發現了一些網址,如果我們使用默認JSSE SIN擴展標記,這是打開,我們得到了以下異常:SSL握手無法識別的名稱異常

javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name 

如果我們設置-Djsse.enableSNIExtension =假,其他的一些網址,拋出此異常:

javax.net.ssl.SSLException: Received fatal alert: unrecognized_name 

有沒有人有這方面的想法?

+0

請添加此類網址的示例(僅限公共網站)。 – 2015-03-04 06:50:44

+1

[SSL握手警報:自升級到Java 1.7.0以來無法識別的\ _name錯誤]的可能重複(http://stackoverflow.com/questions/7615645/ssl-handshake-alert-unrecognized-name-error-since-upgrade- to-java-1-7-0) – 2015-03-04 06:53:08

+0

奇怪的是,如果將SNI擴展標誌設置爲false,服務器擴展名不應該被計數,但仍然會得到unrecognized_name錯誤,對此有何看法? – Shawn 2015-03-06 16:39:34

回答

0

SNI擴展將在SSL握手階段的客戶端hello消息中添加server_name(主機名)。

服務器可能需要爲不同主機名或虛擬主機提供服務請求。它用於解析客戶打算與之通信的主機名的證書。如果未添加或未找到主機名,則可以使用默認證書配置服務器。默認證書可能是其所服務的所有主機的多重簽名證書。

您得到的第一個警告可能是服務器使用默認證書響應,但也會警告主機名無法識別。服務器可能不會簡單地識別主機名稱,因爲它不包含在配置中。 Java似乎拋出一個異常,而不是忽略警告並使用默認證書。

在禁用SNI的其他情況下,您不再包括主機名,並且將請求發送到沒有默認證書的服務器。它會迴應一個致命的錯誤,因爲它無法爲您解決任何證書。