2016-02-25 67 views
4

我有a site通過HTTPS提供,但iTunes無法找到。我懷疑它與iTunes後端服務器是Java 6,而Java 6不支持SNI有關。 SSL實驗室似乎暗示我的網站確實需要SNI(請參閱this report,並搜索SNI),但我想不出爲什麼。我誤解了多域名證書嗎?我在同一臺服務器上運行了多個站點,但我的理解是,只要所有URL都在證書上列爲主題備用名稱,那一切都會好起來的。測試URL是否需要SNI

有誰知道一個好方法來檢查一個URL是否需要客戶端上的SNI支持才能訪問它?我沒有安裝Windows XP/Java 6安裝程序,可悲的是。

+2

開始認爲SSL實驗室測試只包括哪些客戶端支持/不支持SNI,並且他們並不是說有問題的URL需要SNI - 請參閱[本報告](https:// www。 ssllabs.com/ssltest/analyze.html?d=google.com&s=74.125.224.16&hideResults=on)爲由google.com映射的IP地址。 –

+0

請參閱http://serverfault.com/questions/506177/how-can-i-detect-if-a-server-is-using-sni-for-https/780388#780388 – sideshowbarker

回答

2

Nginx一般而言,特別是您的網站接受但不需要SNI。爲了驗證這一點,你不能輕易使用甲骨文的Java開箱即用,因爲它cacerts不包括DST Root CA X3這是根證書所用(最初)「讓我們加密」誰發出自己網站的證書;對於所有版本的Oracle Java到當前版本(8u74)都是如此。 Windows(因此Windows上的IE和Chrome)和Firefox都有這個根證書;我不能說其他操作系統或瀏覽器。

爲了解決這個問題,所以你可以很容易地進行測試,或者:

  • 使用甲骨文的Java 6,但修改JRE/lib/security/cacerts無論是從您的操作系統或瀏覽器,或者按照在https://letsencrypt.org/certificates/鏈接添加DSTX3證書,獲得到https://www.identrust.com/certificates/trustid/root-download-x3.html - 除非頁面非標準地僅爲您提供證書的base64正文,因此您必須在Java keytool將其導入之前手動添加PEM頭和尾部行。

  • 按原樣使用Oracle Java 6,但將您的應用程序(包含系統屬性)配置爲使用您創建的自定義信任庫,其中包含上述的DSTX3證書。

  • 使用在cacerts中包含此根證書的Java 6版本。特別是我使用CentOS 6和它的openjdk軟件包(用於6,7和8)使用包含DSTX3的全系統CA'軟件包',這使我可以輕鬆地進行此測試。我期望但不能證實,其他RedHat變種也是如此。對於其他發行版和平臺,我不能說;如果沒有,請參閱上文。

顯示器使用Wireshark或者類似的連接嘗試地看到,客戶問候不含SNI,但連接成功,並且成功地用於HTTP請求。

如果您實際上想要與服務器通信而不是爲SNI進行測試,只需省略最後的「監視」步驟即可。

6

SSLLabs關於SNI的報告通常是正確的。如果您的證書包含所有可能的主機,您的理解是不需要SNI的,這也是正確的。但是,理論上不需要並不意味着您的服務器設置不需要SNI。

我沒有安裝Windows XP/Java 6,可悲地玩。

鑑於你只指定你沒有的東西,我會假設你有其他所有可能使用的東西。一個簡單的檢查方法是OpenSSL:已

# without SNI 
$ openssl s_client -connect host:port 

# use SNI 
$ openssl s_client -connect host:port -servername host 

比較的openssl s_client兩個調用的輸出。如果他們所服務的證書不同,或者如果沒有SNI的呼叫未能建立SSL連接,則需要SNI才能獲得正確的證書或建立SSL連接。

3

一個簡單的方法來檢查,如果網站依賴於SNI是這樣的:

openssl s_client -servername alice.sni.velox.ch -tlsextdebug -msg \ 
    -connect alice.sni.velox.ch:443 2>/dev/null | grep "server name" 

如果在輸出可以看到以下,這意味着該網站是否使用SNI。

TLS服務器擴展名 「服務器名」(ID = 0),LEN = 0

以上是an answer at serverfault摘要。

+1

我不相信這是正確的。我認爲這隻會告訴你,如果網站*支持* SNI,不需要它。 https://www.ssllabs.com/ssltest/將標記「此網站僅適用於支持SNI的瀏覽器。」如果一個網站需要SNI的話。 –