问题标签 [sni]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何在 python 2.7 中添加对 SNI 的支持
一些网站的 api 支持 SNI(Server Name Indication)。但它也提醒我,SNI 仅在 python 3.4 之后才支持。不过,我目前使用的是 python 2.7,暂时还没有升级到 python3.4 的打算。
有没有将 SNI 与 python 2.7 一起使用的解决方案?非常感谢详细的解释和示例。
apache - Apache2 错误:通过 SNI 和 HTTP 提供的主机名不匹配
在我的 Apache error.log 中,我收到如下错误:
通过 SNI 提供的主机名 www.example.com 和通过 HTTP 提供的主机名 hk.dv.nextmedia.com 不同
我不知道 hk.dv.nextmedia.com 是什么。它与我的网站或服务器无关,而且我从未在我的 Apache 或服务器配置中的任何地方输入过该域。
任何人都可以阐明这个错误吗?我应该担心我的服务器上可能发生的任何恶意事件吗?
java - SSL/TLS 连接重置 - 如何强制 Java 客户端使用 SNI?
我有两个:本地主机上的 STS 服务器和 Spring Web 应用程序。它奏效了。我已经测试了 OAuth2 授权代码授予流程 - 完全正常工作。
我将 STS 移到其他机器上,Web 应用程序在获取访问令牌时出现问题 - 完整跟踪(从 STS 重定向后停止/错误;刚开始从:https://sts-machine/authz/oauth2-resource/oauth/token
端点获取令牌;在访问 url: 处停止https://localwebapp:7443/swd/webLogin?code=306b88903d394f0b8145b2e8035fd306&state=PtTrt8
):
因此,当 webapp 尝试从访问令牌交换“代码”时,连接会重置:https://sts-machine/authz/oauth2-resource/oauth/token
。
有趣的事实:手动提出请求效果很好!(手动交换访问令牌的代码)使用 Chrome 应用程序“Advanced Rest Client Application”和“Fiddler”请求编写器进行测试。
我用wiresharks嗅探了两台机器。两者的结果相同 - 屏幕截图:http ://i.imgur.com/2AYstN0.png (其中:10.1.0.121 是 localwebapp 机器,并且:10.1.0.80 是 sts-machine)
为什么会有连接重置?
有关配置的详细信息:
localwebapp:在 tc Pivotal Server(有点像 Tomcat)上运行,Win 8.1
sts-machine:是 IIS 上的 Thinktecture 授权服务器,Win Server 2012
更新 1
我发现:
openssl s_client -connect sts-machine:443
不起作用,但是:
openssl s_client -connect sts-machine:443 -servername sts-machine
确实起作用!这表明Java 客户端上的SNI存在问题。试图解决设置系统属性的问题:jsse.enableSNIExtension
to true
,但没有任何成功...如何强制 JVM 使用 SNI?
haproxy - haproxy sni ssl_fc_has_sni 总是 0
我正在尝试在 HAProxy 中创建基于 SNI 的前端/后端设置。似乎 ssl_fc_has_sni 在我的日志中总是评估为 0,我无法弄清楚原因。
这是我一直在测试的配置的简化版本:
其他注意事项:
haproxy -vv
显示 OpenSSL 库支持 SNI:是- 我正在通过 vagrant 在 Fedora 20 上运行 haproxy 版本 1.5.9
- 日志总是显示 SNI:0
haproxy[17807]: frontend:public_ssl be_no_sni/fe_no_sni client_ip:<ip> client_port:42285 SSL_version:- SSL_cypher:- SNI:0 --
- 我正在测试
openssl s_client -servername www.example.com -connect <ip>:443
.
我觉得我错过了一些明显的东西,因为没有 ssl 版本、密码或 sni。
android - 自定义 SSLSocketFactory 不使用自定义信任管理器
在我们的应用程序中,当应用程序与服务器通信时,我对证书(公钥固定)(针对 MITMA)进行了额外检查。为了与服务器通信,我使用 HttpClient。另外我在生产中有一些代理服务器,所以我需要使用 SNI。在我们将应用程序发布到生产环境之前,我们会在另一个环境(TEST env)中对其进行检查。对于 TEST 环境,我们只有自签名证书,因为它仅用于测试,我们不想只为这种情况购买新证书。
为了实现它,我创建了自定义 SSLSocketFactory (org.apache.http.conn.ssl.SSLSocketFactory)。但问题是它不适用于自签名证书。我将自定义 trustManager (IgnoreCertificatesTrustManager) 设置为 sslSocketFactory (SSLCertificateSocketFactory)。如果我使用以下代码:
自签名证书的检查工作(忽略 TrustManager (IgnoreCertificatesTrustManager) 中的检查)。但代码不支持 SNI 解决方案。我做错了什么?
谢谢。
ssl - 强制 SSL 并处理不支持 SNI 的浏览器
我正在寻找一种方法,将支持 SNI 的网络浏览器从 http 重定向到 https,以及将不支持 SNI 的网络浏览器从 https 重定向到 http。第二种情况很重要,例如,如果用户收到通过邮件发送的 https url 并使用旧浏览器打开它。
我想避免使用用户代理,因为我不想跟踪新的浏览器版本并相应地更新配置文件,例如 .htaccess。
因此,我使用 javascript 来检测 SNI 支持并重定向网络浏览器。以下代码检查连接是否受 SSL 保护。如果不是 SSL 安全的,它会检查 SNI 支持并在支持 SNI 时重定向浏览器:
如果用户第一次访问该网站并使用 SSL 加密,他会被重定向到 http url 以运行 javascript 代码。否则,旧浏览器会打开受保护的网站并显示错误消息。
更新 1: 有一个重定向循环,因为 javascript 不提供引荐来源网址。该解决方案似乎避免了循环:
更新 2: 我们希望避免重定向爬虫。
更新 3: 我们通过 PHP 使用更可靠的 https 检测(无重定向循环)。
开放式问题:
- 如何完全避免使用用户代理?如果不可能,是否缺少任何重要的网络爬虫用户代理?
- 使用更新 3 中描述的方法,后退按钮无法正常工作。如果用户从 http 转发到 https,然后单击后退按钮,他将被重定向到 http,然后再次从 http 到 https。这个问题可以通过 location.replace() 解决,但该方法不支持referrer。
- 在以下示例中,如何使用 location.replace() 和http://www.example.org作为推荐人?示例:google.de -> http://www.example.org -> https://www.example.org -> 后退按钮单击 -> http://www.example.org(不重定向到 google.de !!!) -> https://www.example.org
- 如果浏览器不支持javascript,则强制使用http。
- 这种方法有什么未知的问题吗?
学分:
apache - Apache 忽略具有多个 SSL 域的 documentroot
我在这里拉头发。
我让 Apache 与两个使用 SNI 运行 SSL 的不同域一起运行。
配置如下。如果我连接到 console.somedomain.com 它会将用户放在 /var/www/html/ 而不是 /var/www/html/somedomain/Admin/adminv4/
但是,如果我连接到 support1.somedomain.com ,它可以正常工作并且位于正确的目录中。
哪一个地球可能是错的?目录有效。
iis - 在 IE/XP 支持方面使用通配符 SSL 证书是否安全?
我们希望通过让多个主机名指向同一个 IP(以及 IIS 中的网站)并根据用户进入的主机名动态切换站点的数据库来创建“白标”站点。
例如。https : //co1.mysite.com、co2.mysite.com和co3.mysite.com都将指向同一个站点,但在站点的代码中,我们可能会根据它们来的主机名更改数据库连接字符串和徽标等在上。
在这个特定的上下文中(所有站点都使用相同的 IP)我是否正确地假设 SNI 没有发挥作用,只要使用通配符证书 (*.mysite.com) 那么所有浏览器都能够访问网站好吗?即使是那些不支持 SNI 的(例如 Windows XP 上的 Internet Explorer)?
ssl - 如何模拟非 SNI 浏览器(不支持 SNI)?
我正在为 Apache 设置几个不同的 SSL 证书,这些证书用于驻留在同一服务器上的不同域(因此共享相同的 IP 地址)。
通过Qualys SSL 测试,我发现有些客户端(即BingBot 截至 2013 年 12 月)不支持 SNI 扩展。
所以我正在考虑制作一个可以收集此类客户端请求的特殊默认 Web 应用程序,但我该如何模拟这些客户端呢?
如果这很重要,我在 Windows 8 上,无法访问 Linux 机器。
java - 如何在使用 SSLCertificateSocketFactory.getInsecure 创建的 SSLSocket 上启用 SSL 证书验证
我正在尝试使用以下属性创建 SSLSocket:
- 它应该进行 SSL 证书验证。
- 它应该允许设置自定义 SNI(服务器名称指示)。
据我了解:
SSLCertificateSocketFactory.getDefault
不允许您设置自定义 SNI,但会进行 SSL 证书验证。SSLCertificateSocketFactory.getInsecure
确实允许您设置自定义 SNI,但不进行 SSL 证书验证。
因此,最好的解决方案可能是在使用SSLCertificateSocketFactory.getInsecure
.
我正在使用以下代码设置自定义 SNI: