2014-12-13 34 views
0

我想获得一个安全的Websocket行,当连接的两端位于可变位置时。如何在客户端和服务器位置均为动态时通过TLS运行c#websockets?

什么即时通讯做:我有

运行的WebSocket 服务器(斑点)C#程序,这个程序被部署到用户的机器。 接下来,我有一个网站和一个Android应用程序运行Websocket 客户端(分别在JavaScript和Java)。客户端知道如何连接到服务器(通过php从数据库中查询)。

所以这种方式直接连接从客户端到服务器,而不需要通过网站或任何东西,这主要是因为它可以包含敏感信息,而不是网站必须触及,这是一个巨大的优势!该网站本身使用可信证书运行HTTPS。

c#Fleck服务器需要WSS的pfx证书,我试图使用openSSL和我用于网站的证书。但是,当websocket证书不好时,浏览器会自动断开连接。如果我去http s:// localhost:port我得到了预期的浏览器警告,说我的域与证书不匹配,同样的错误可能是浏览器丢弃websocket连接的原因,因为用户的PC或他们连接的任何电脑/电话都使用该域名。

如果我上面的观察是正确的,本质上我会需要像可信域的可信证书。这样的事情存在吗?

谢谢你的时间!

回答

1

如果我正确理解你的架构必须:

  • 一个WebSocket的服务器上的客户端个人电脑,它通常位于后面里面的一些私有网络中的一些路由器/防火墙运行。
  • 不同地方的Websocket客户端,特别是在Android应用程序和Web服务器中。这些WebSocket客户端可能与WebSocket服务器位于同一本地网络中,但也可能位于某个外部公共网络内部或某个不同的专用网络内部。

现在,您正试图通过使用WSS(即通过TLS的Websockt)和Websocket服务器的一些证书来保护客户端和服务器之间的通信。并且您想要为所有Websocket端点使用相同的证书,并且它应该随服务器应用程序一起提供。

这种设置会不会有几个原因的工作:

  • 由于WebSocket的服务器是为个人电脑,主要是里面的一些内部局域网上它不会从外部访问,除非用户添加路由器或防火墙上的传入连接的特定端口转发规则。
  • 如果要为所有服务器实例使用相同的证书,则不仅需要发送证书,还需要将匹配的私钥与WebSocket服务器应用程序一起发送。这意味着任何人都可能提取证书和私钥,并将其用于他们自己的假服务器或用于针对您的系统的中间人攻击。

相反,这些问题的证书中的名称其实并没有太大的问题,因为你可以简单地使用certificate/public key pinning对这个固定的证书,而不是检查证书链和主机名。但是,我认为整个设计是有缺陷的。

除此之外,security.stackexchange.com可能是提问有关安全体系结构的更好地方。

1

没有..有一个可变域将所有意图和目的打破了“信任”的想法。如果任何人都可以使用您的证书...然后任何人可以使用您的证书。你的用户是否知道你在他们的机器上设置了一个Web服务器?请记住..用户必须打开防火墙到托管此Web服务器的服务器。

可能您的最佳选择是设置您的客户端代码以忽略证书问题并继续。

相关问题