SNI

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SNI相关的知识,希望对你有一定的参考价值。

SNI

我们知道,在 nginx 中可以通过指定不同的 server_name 来配置多个站点。HTTP/1.1 协议请求头中的 Host 字段可以标识出当前请求属于哪个站点。但是对于 HTTPS 网站来说,要想发送 HTTP 数据,必须等待 SSL 握手完成,而在握手阶段服务端就必须提供网站证书。对于在同一个 IP 部署不同 HTTPS 站点,并且还使用了不同证书的情况下,服务端怎么知道该发送哪个证书?

Server Name Indication,简称为 SNI,是 TLS 的一个扩展,为解决这个问题应运而生。有了 SNI,服务端可以通过 Client Hello 中的 SNI 扩展拿到用户要访问网站的 Server Name,进而发送与之匹配的证书,顺利完成 SSL 握手。

参考文档:

关于启用 HTTPS 的一些经验分享(一)



新的nginx集群配置了多个ssl证书,所以客户端必须支持SNI才能正确访问https的域名。

各个客户端需要升级到支持SNI的版本才可以,目前已知的有:

1. 升级JDK至少到1.7。
2. 升级HttpClient至少到4.3.2。


以上是关于SNI的主要内容,如果未能解决你的问题,请参考以下文章

如何实现服务器名称指示 (SNI)

在 AFNetworking 中支持 SNI

通过wireshark抓包分析SNI字段及支持加密套件集

SNI:SSLHandshakeException unrecognized_name

使用 SNI 和 Undertow 在一个 IP 下添加多个域

使用 SSLCertificateSocketFactory 的 Android HTTPS SNI 支持