假设有一个名为 https://example.com 的网站.对域的 DNS 查找返回以下 A 记录:
1.1.1.1 A example.com
1.1.1.2 A example.com
1.1.1.3 A example.com
1.1.1.4 A example.com
这些地址中的每一个都有 example.com 的 SSL 证书,并且在端口 443 上运行一个 websocket 服务器。
客户端可以使用类似的方式连接到其中一台服务器
var wss = new WebSocket("wss://example.com");
这会将客户端连接到基于 DNS 循环的服务器:客户端无法控制她连接到的服务器。
我的问题如下:
客户端如何在没有证书问题的情况下连接到特定地址?
例如,如果客户端知道她希望连接到 1.1.1.4 并尝试连接到
var wss = new WebSocket("wss://1.1.1.4");
她将遇到 ssl 错误,因为服务器不能将个人地址作为其证书中的替代名称。
是否可以在建立连接时指定主机名和个人地址;类似
var wss = new WebSocket("wss://example.com?ip=1.1.1.4");
我相信您可以使用 CURL 和诸如 curl https://DOMAIN.TLD --resolve 'DOMAIN.TLD:443:IP_ADDRESS'
最佳答案
为避免证书问题,请请求域名而不是 IP。我建议这样做:
1.1.1.1 A example.com 1.1.1.2 A example.com 1.1.1.3 A example.com 1.1.1.4 A example.com 1.1.1.1 A a.example.com 1.1.1.2 A b.example.com 1.1.1.3 A c.example.com 1.1.1.4 A d.example.com
所有 5 个域都有一个 SAN 证书 (example.com + [a-d].example.com) 您可以单独测试 [a-d].example.com 或 example.com 中的任何一个,所有这些都将使用相同的证书进行响应,我认为没有问题。
关于javascript - 客户端 Websocket SSL——连接到特定的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49018314/