测试URL是否需要SNI

问题描述:

我有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

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进行测试,只需省略最后的“监视”步骤即可。

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连接。

一个简单的方法来检查,如果网站依赖于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的话。 –