首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测服务器是否将SNI用于HTTPS?

如何检测服务器是否将SNI用于HTTPS?
EN

Server Fault用户
提问于 2013-05-08 21:04:05
回答 3查看 92.5K关注 0票数 50

我正在寻找一种简单的方法来了解服务器是否正在使用服务器名称指示SSL扩展名作为其网站上的HTTPS证书。使用浏览器或Unix命令行的方法是可以的。

谢谢!

EN

回答 3

Server Fault用户

回答已采纳

发布于 2013-05-09 09:37:51

SNI是由客户端发起的,因此您需要一个支持它的客户机。除非您使用的是windows,否则您的浏览器就可以了。如果您的客户端允许您正确地调试SSL连接(不幸的是,即使是gnutls/openssl命令也不能),那么您可以看到服务器是否在扩展的hello中返回一个server_name字段。请注意,缺少此字段只意味着服务器在客户端hello中没有使用server_name来帮助选择证书,而不是它不支持证书。

因此,在实践中,最简单的测试就是简单地尝试连接。为此,您需要知道两个解析到同一个IP的名称,可以对其建立ssl连接。https是最简单的,因为您可以简单地浏览到这两个名称,并查看您是否获得了正确的证书。

有三项成果:

  • 您将获得一个通配符证书(或一个包含两个名称的subjectAltName证书):您什么也学不到
  • 您至少为其中一个获得了错误的证书:要么服务器不支持SNI,要么配置错误。
  • 您将获得两个不同的证书,它们都用于正确的名称:支持并正确配置SNI。

一个稍微复杂的测试,将产生更多的信息,是让wireshark打开和捕获时,浏览。然后,您可以通过过滤ssl.handshake找到相关的数据包。下面的屏幕截图是一个支持SNI的客户机hello/server hello对的示例:

当然,服务器hello中没有server_name字段并不表示不支持SNI。仅仅是客户端提供的server_name没有用于决定使用哪个证书。

票数 26
EN

Server Fault用户

发布于 2016-06-01 20:34:15

您可能需要的用于检测SSL/TLS服务器名称指示扩展头的存在的一个衬垫是:

代码语言:javascript
复制
openssl s_client -servername www.SERVERNAME.com -tlsextdebug -connect www.YOURSERVER.com:443 2>/dev/null | grep "server name"

其中,www.SERVERNAME.com是您正在测试的SNI值,而www.YOURSERVER.com是您正在测试的具有TLS功能的服务器的域名或IP地址。

命令行使用openssl's s_client (参见S_客户(1))连接到www.YOURSERVER.com on 443上的服务器。-tlsextdebug选项打开TLS扩展调试输出。-servername选项告诉s_client程序在TLS握手时将www.SERVERNAME.com作为ClientHello数据包中SNI字段的值传递。

最后,2>/dev/null简单地隐藏了stderr输出(可以是噪声),而| grep "server name"管道过滤标准以在s_client的S TLS扩展调试输出中显示称为“服务器名”的TLS扩展。

如果您看到一行输出,如

代码语言:javascript
复制
TLS server extension "server name" (id=0), len=0

然后,服务器在其ServerHello响应中返回SNI报头信息。如果您不支持,那么服务器要么不支持SNI,要么没有配置为返回SNI信息,给出您所要求的名称。在这种情况下,请再次检查您是否在-servername选项中使用域名,服务器应该响应该域名的信息。

票数 41
EN

Server Fault用户

发布于 2015-05-15 17:52:06

您可以使用openssl获取和查询证书。

  • openssl s_client -connect获取证书
  • openssl x509解析证书
  • grep查找"DNS:“信息

openssl s_client -connect alice.sni.velox.ch:443 | openssl x509 -noout -text | grep DNS:

代码语言:javascript
复制
% openssl s_client -connect alice.sni.velox.ch:443 | openssl x509 -noout -text | grep DNS:
depth=2 C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2
verify return:1
depth=1 C = BM, O = QuoVadis Limited, CN = QuoVadis Global SSL ICA G2
verify return:1
depth=0 C = CH, ST = Zuerich, L = Zuerich, O = Kaspar Brand, CN = alice.sni.velox.ch
verify return:1
                DNS:alice.sni.velox.ch, DNS:carol.sni.velox.ch

最后一行显示了证书中的所有SNI条目:

代码语言:javascript
复制
                DNS:alice.sni.velox.ch, DNS:carol.sni.velox.ch
票数 -1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/506177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档