假设有一个名为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 Round Robin的服务器:客户端无法控制她连接的服务器。
我的问题如下:
客户端如何在没有证书问题的情况下连接到特定地址?
例如,如果客户端知道她希望连接到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'
答案 0 :(得分:2)
要避免证书问题,请申请域名而不是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,所有人都会使用相同的证书进行测试,我认为没有任何问题。