我有一个网站https://www.foo.com
,在这个网站上我连接到其他带有websocket的机器(一些机器的随机ip地址,我们的软件在其上运行)。即我连接到ws://123.45.67:80
问题是这个站点是通过HTTPS提供的,而我想连接的websocket服务器也需要安全连接(WSS),并且不能使用常规的websocket(WS)。
问题是:如何签署将驻留在不属于我的域的每个websocket服务器上的证书?我是否可以使用主站点https://www.foo.com
中的证书为任意域上的websocket服务器签署x509证书?
我使用Fleck作为websocket服务器
答案 0 :(得分:2)
虽然这个问题似乎已经解决了(根据提出问题的时间),我会为那些在这里遇到困扰的人添加一些链接。
决定您要使用的证书
使用 foo.com 的证书
如果要使用与页面相同的证书,则必须将IP地址添加到证书中(询问发行人如何实现此目的,因为这主要取决于他们的基础架构。
获取新证书
就像你获得现有证书一样,但是你的websocket机器with the IP address。
生成新的自签名证书
如果您想生成一个自签名证书(在所有浏览器中发出警告,并且可能在没有先手动信任它的情况下无效),只需use OpenSSL to generate a self-signed certificate。
将证书添加到Fleck
如Fleck's Readme中所述,您必须使用 wss:// 协议(使用var server = new WebSocketServer("wss://[IPAddress]:[Port]");
)并将Fleck指向您的证书(x509包含公共和私有,密钥)server.Certificate = new X509Certificate2("path/to/cert.pfx");
如果IP地址频繁变化,这非常复杂(如果不是不可能的话)。然后我建议使用代理监听(子)域并处理https / wss。然后,代理和websocket机器之间的连接应该是物理安全的(如直接连接)或通过VPN。
我希望,我解决了你的问题,我的回答很清楚。如果没有,请随意评论我可以改进的内容。