有没有人做过任何分析(或知道在哪里可以find一些!)互联网用户使用支持SNI(服务器名称指示)SSL / TLS证书的浏览器/操作系统组合的比例是多less? 我知道,例如XP上的IE不支持这个,旧版本的OSX也不支持。 我知道,没有像“典型”用户那样的东西,而且每个站点都有不同的configuration文件,但是我正在寻找某种程度的视图来说明这些configuration这些日常常用来帮助决策过程沿着一点我想要部署一个新的网站。 如果您确实提供了具体数字或分析参考,您是否也可以将date添加到答案中? 只是为了让将来看到这个问题的其他人有一个什么时候这个信息是最新的想法,正如我所期望的那样,随着时间的推移它将会转变。
首先,我很抱歉我的英文不好。 我仍然在学习它。 这里是: 当我为每个IP地址托pipe一个网站时,我可以使用“纯粹的”SSL(没有SNI),并且在用户甚至告诉我他想要检索的主机名和path之前进行密钥交换。 密钥交换后,所有数据都可以安全地交换。 也就是说,如果有人正在嗅探networking,就不会泄露任何机密信息*(见脚注)。 另一方面,如果我按照IP地址托pipe多个网站,我可能会使用SNI,因此我的网站访问者需要告诉我目标主机名,然后才能向他提供正确的证书。 在这种情况下,有人嗅探他的networking可以跟踪他正在访问的所有网站域名。 我的假设是否有错误? 如果没有,这不代表隐私问题,假设用户也使用encryption的DNS? 脚注:我也意识到,一个嗅探器可以对IP地址进行反向查找,找出哪些网站被访问过,但是通过networking电缆以明文forms传输的主机名似乎使得对于审查机构而言,基于关键字的域阻塞更容易。
我希望标题清楚。 如何防止启用非ssl虚拟主机的HTTPS请求转到启用ssl的第一个虚拟主机(安装程序是Apache-SNI)。 例如,使用下面的缩写configuration, https://example.com ://example.com(非ssl虚拟主机)的请求由Apache在启用了ssl的vhost https://example.org 。 我想禁用这种行为,并可能回复相应的HTTP响应代码(不确定是什么)。 这可能不可能,但我想我会问。 # I actually have a SNI setup, but it's not demonstrated here. # I don't think it's relevant in this situation. NameVirtualHost *:80 NameVirtualHost *:443 <VirtualHost *:80> ServerName example.org </VirtualHost> <VirtualHost *:443> ServerName example.org </VirtualHost> <VirtualHost *:80> ServerName example.com </VirtualHost> 编辑:也许在第一个SSL虚拟主机的mod_rewrite规则?
除非我读过的每一个答案都是错误的,否则SNI应该可以做我想做的事情,然而每个指南都告诉我要做我正在做的事情。 然而,nginx正在提供错误的证书,所以我显然做错了什么。 ❯ sudo nginx -V | grep SNI %1 nginx version: nginx/1.10.3 built with OpenSSL 1.1.0f 25 May 2017 TLS SNI support enabled configure arguments: –with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-qJwWoo/nginx-1.10.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' –with-ld-opt='-Wl,-z,relro -Wl,-z,now' –prefix=/usr/share/nginx –conf-path=/etc/nginx/ngi nx.conf –http-log-path=/var/log/nginx/access.log –error-log-path=/var/log/nginx/error.log –lock-path=/var/lock/nginx.lock –pid-path=/run/nginx.pid –modules-path=/usr/lib/nginx/modules –http-client-body-temp-path=/var/lib/nginx/body –http-fastcgi-temp-path=/var/lib/nginx/fa stcgi –http-proxy-temp-path=/var/lib/nginx/proxy –http-scgi-temp-path=/var/lib/nginx/scgi –http-uwsgi-temp-path=/var/lib/nginx/uwsgi –with-debug –with-pcre-jit –with-ipv6 –with-http_ssl_module –with-http_stub_status_module […]
我目前有一个服务器,它会自动将所有的HTTP请求redirect到相应的HTTPS站点。 问题是,似乎有些浏览器不接受SSL证书(StartSSL.com)或不支持SNI,因此他们得到证书警告,用户将不会继续在网站上冲浪。 是否有任何机制试图使浏览器使用HTTPS而不是普通的HTTP,当这种方式不起作用时(例如,证书不被接受或者SNI不被支持),它将继续使用HTTP。 目前我使用的Apache 2.4与多个虚拟主机,所有redirectHTTP连接Redirect / https://domain.example/ 。
我们有一个目前拥有2个应用程序的networking服务器场 – 两个应用程序都在所有服务器上运行。 我们想分割这个,所以我们有一个专用的服务器场为每个应用程序(我们有很好的理由)。 我们希望在所有的服务器前都有一个负载均衡器,这个负载均衡器会根据主机名将stream量路由到正确的服务器场,但是我们希望维护到服务器的SSL。 看来我们提供的路由器不这样做。 我很欣赏,如果没有SNI,这是不可能的,但我们预计几乎所有的stream量的SNI指标。 现在我是程序员,而不是networking人员,但是当新的SSL连接请求进入时,路由器不能检查SNI头,并且路由到正确的场。 假设传入的SSL连接由{source IP:source port}标识,那么对于后续传入的数据包(如果SNI仅存在于第一个数据包中),它不能记住这一点吗? 据我可以告诉Haproxy这样做,但似乎硬件负载平衡器不。 这是有什么理由的,还是我们应该推动的? (对于最后一名在XP上使用不包含SNI的IE,我们希望将stream量发送到旧的农场,并在必要时pipe理代理到新的农场。
到目前为止,我还没有用nginx来使用SNI。 但是,由于IP地址池相当充足,商业XP支持即将停止(最终),我正在考虑将几个网站转换为SNI。 我意识到SNI(XP问题,非常古老的浏览器)可能带来的一般限制和缺陷。 但除此之外,还有什么我应该知道的? 像 – 与使用SNI相关的陷阱 – 与最近(着名的!)浏览器的问题/错误
我想主持一个网站,应该听取子域名(如sub.domain.com)与多个网站,住在二级域名(如domain2.com,domain3.com)与IIS和SSL。 对于具有子域名的网站,我有一个通配符证书(*。domain.com),我也有专门针对其他网站(domain2.com和domain3.com)的证书。 可以将这样的设置托pipe在同一个IIS上(如果这很重要,则在Azure云服务Webangular色中)? 问题正是titobf 在这里解释的 :从理论上讲,我们需要使用SNI进行绑定,为domain2 / 3.com指定主机,然后为* .domain.com指定主机。 但是在实践中,不pipe如何设置绑定,如果所有网站都处于打开状态,它也会收到所有对domain2 / 3.com的请求(虽然据说它只是作为最后一招)。 任何帮助,将不胜感激。 仍然没有解决 不幸的是,我无法解决这个问题:它似乎只能以非常复杂的方式解决,比如创build一个位于IIS和Internet之间(基本上是防火墙)的软件,并修改传入的请求(在SSL握手发生之前! )以允许该场景。 我相当有信心,这是不可能的,无论如何,甚至不从本地模块。 我必须澄清:我们使用Azure云服务,所以我们有一个进一步的约束,我们不能使用多个IP地址(请参阅: http : //feedback.azure.com/forums/169386-cloud-services-web-and -worker-role / suggestions / 1259311-multiple-ssl-and-domains-to-one-app )。 如果您可以将多个IP指向您的服务器,那么您就不会遇到这个问题,因为您也可以为IP创build绑定,并且这些将一起使用通配符绑定。 更具体地说,您需要通配符站点的IP(但由于您现在拥有单独的IP,因此您不必configuration通配符主机名绑定),而为所有其他非通配符configuration另一个IP。 其实我们的解决方法是使用非标准的SSL端口8443.所以SNI绑定实际上绑定到这个端口,因此它和其他绑定一起工作。 不好,但是可以接受的解决方法,直到你可以使用多个IPangular色。 现在是非工作绑定 第一个https绑定是带有简单证书的SNI,第二个不是SNI,带有通配符证书。 http站点和SNI https站点一样工作,但带有通配符绑定的站点提供了“HTTP错误503.服务不可用”。 (没有任何进一步的信息,没有失败的请求跟踪或事件日志条目)。 最后得到它基本上工作 如Tobias所述,启用ETW跟踪日志显示根错误如下: 请求(请求ID 0xF500000080000008)由于原因而被拒绝:UrlGroupLookupFailed。 据我了解这意味着http.sys不能将请求路由到任何可用的端点。 使用netsh http show urlacl检查注册的端点netsh http show urlacl确实有一些注册为端口443的东西: Reserved URL : https://IP:443/ User: NT AUTHORITY\NETWORK […]
我需要通过https服务几个应用程序使用一个外部IP地址。 SSL证书不应该在反向代理上进行pipe理。 它们安装在应用程序服务器上。 反向代理可以configuration为使用SNI并在端点传递ssl来终止? 这可能使用像Nginx或Apache的东西? 什么configuration看起来像?
在Debian Squeeze上,我使用nginx 1.2.7和OpenSSL 0.9.8o共30个域名。 在其中两个我启用了SSL,这两个工作正常。 SSLconfiguration用于两个域: listen 443 ssl; ssl_certificate /etc/nginx/ssl/example.org-unified.crt; ssl_certificate_key /etc/nginx/ssl/example.org.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security max-age=600000; 使用ssllabs.com检查器检查两个域我得到一个域的通知“这个网站只适用于具有SNI支持的浏览器”。 对于其他域我没有得到这个消息。 似乎nginx默认情况下将按字母顺序排列的第一个域的证书发送给没有SNI支持的客户端。 我可以改变这种行为吗? 换句话说:我想configurationnginx使一个具有SSL的特定域,即使对于没有SNI支持的客户端也是如此。 其他域也应该与SSL一起工作,但是如果它仅适用于启用了SNI的客户端,则可以。 谢谢!