用于 TLS 上的 WebSocket Secure 的 WCF ServiceHost 配置

Posted

技术标签:

【中文标题】用于 TLS 上的 WebSocket Secure 的 WCF ServiceHost 配置【英文标题】:WCF ServiceHost configuration for use with the WebSocket Secure over TLS 【发布时间】:2016-03-10 12:20:39 【问题描述】:

我已经使用 ServiceHost 创建了一个 WebSocket 服务器:

using (ServiceHost host = new ServiceHost(typeof(WebSocketsServer), baseAddress))

    CustomBinding binding = new CustomBinding();
    binding.Elements.Add(new ByteStreamMessageEncodingBindingElement());
    HttpTransportBindingElement transport = new HttpTransportBindingElement();
    transport.WebSocketSettings.TransportUsage = WebSocketTransportUsage.Always;
    transport.WebSocketSettings.CreateNotificationOnConnection = true;
    binding.Elements.Add(transport);

    host.AddServiceEndpoint(typeof(IWebSocketsServer), binding, "");

    host.Open();

它适用于我的 javascript 应用程序。目前我正在尝试添加对 WebSocket Secure 的支持。我已将 HttpTransportBindingElement 更改为 HttpsTransportBindingElement,将 baseurl 更改为 https://,并将 JavaScript 应用程序中的连接 url 更改为 wss://

using (ServiceHost host = new ServiceHost(typeof(WebSocketsServer), baseAddress))

    CustomBinding binding = new CustomBinding();
    binding.Elements.Add(new ByteStreamMessageEncodingBindingElement());
    HttpsTransportBindingElement transport = new HttpsTransportBindingElement();
    transport.WebSocketSettings.TransportUsage = WebSocketTransportUsage.Always;
    transport.WebSocketSettings.CreateNotificationOnConnection = true;

    binding.Elements.Add(transport);


    host.AddServiceEndpoint(typeof(IWebSocketsServer), binding, "");


    host.Open();

我期待它会工作,应用程序启动时没有错误,但在连接 JavaScript 后我收到此错误。

WebSocket connection to 'wss://localhost:5555/wsData' failed: Error in connection establishment: net::ERR_CONNECTION_RESET

为了安全使用 WebSocket,是否需要对 ServiceHost 进行任何其他设置?微软的 ServiceModel 中是否实现了 WebSocket 安全?

【问题讨论】:

【参考方案1】:

我终于找到了解决方案。上面提到的代码适用于该场景,但我必须为主机配置证书并通过 HTTPS 运行客户端应用程序。这篇文章很有帮助Self hosted WCF using WebSockets is not working using SSL

【讨论】:

以上是关于用于 TLS 上的 WebSocket Secure 的 WCF ServiceHost 配置的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket TLS 证书设置乐趣

如何创建安全(TLS/SSL)Websocket 服务器

React-native websocket TLS连接

令人困惑的 websocket tls 功能

Websocket++ 错误:handle_transport_init 收到错误:TLS 握手失败

如何使用 TLS/SSL 确保 WebSocket 连接的安全