启用 SSL 的网站无法连接到本地 C# Web 套接字服务器

Posted

技术标签:

【中文标题】启用 SSL 的网站无法连接到本地 C# Web 套接字服务器【英文标题】:SSL enabled Web Site can't connect to Local C# Web Socket Server 【发布时间】:2016-03-15 08:54:41 【问题描述】:

我正在使用local web socket server implemented in C#。当我连接到没有 SSL 的托管 html 页面时,它工作正常,但是当启用 SSL 时,Web 套接字连接会自动关闭。

在库的 readMe.txt 文件中,它说要附加一个认证文件。 这是我创建和附加文件的方式。右键单击项目并签署清单并提供密码。然后我将Certification属性设置如下。

WebSocketServer server = new WebSocketServer("wss://0.0.0.0:8431");
string path = "C:\\Users\\Dehan\\Documents\\MySolutionName\\";
server.Certificate = new X509Certificate2(path+"certificateName.pfx", "certificate_pwd", X509KeyStorageFlags.MachineKeySet);
server.Start(socket =>
            
                socket.OnOpen = () =>
                                        
                   //inside onopen
                ;

                socket.OnError = error =>
                
                    //inside onerror
                ;

                socket.OnClose = () =>
                
                   //inside onclose
                ;

                socket.OnMessage = message =>
                
                 //inside onmessage
                

           );

以下代码显示了 html 页面的 javascript

<script type="text/javascript">
    var start = function () 
        var inc = document.getElementById('incomming');
        var wsImpl = window.WebSocket || window.MozWebSocket;
        var form = document.getElementById('sendForm');
        var input = document.getElementById('sendText');

        inc.innerHTML += "connecting to server ..<br/>";

        // create a new websocket and connect
        window.ws = new wsImpl('wss://127.0.0.1:8431/');

        // when data is comming from the server, this metod is called
        ws.onmessage = function (evt) 
            inc.innerHTML += evt.data + '<br/>';
        ;

        // when the connection is established, this method is called
        ws.onopen = function () 
            inc.innerHTML += '.. connection open<br/>';
        ;

        // when the connection is closed, this method is called
        ws.onclose = function () 
            inc.innerHTML += '.. connection closed<br/>';
        

        form.addEventListener('submit', function(e)
            e.preventDefault();
            var val = input.value;
            ws.send(val);
            input.value = "";
        );

    
    window.onload = start;
</script>

【问题讨论】:

【参考方案1】:
server.Certificate = new X509Certificate2(path+"certificateName.pfx", "certificate_pwd", X509KeyStorageFlags.MachineKeySet);

在上面的代码行中,如果您使用的是自签名证书,请确保将其添加到您的计算机受信任的根权限中。

【讨论】:

以上是关于启用 SSL 的网站无法连接到本地 C# Web 套接字服务器的主要内容,如果未能解决你的问题,请参考以下文章

连接到 CommissionJunction 令牌时出错:[60] SSL 证书问题:无法获取本地颁发者证书

Openfire Xmpp Chat 无法在启用 SSL 的情况下工作

请求(由 SSLError 引起(“无法连接到 HTTPS URL,因为 SSL 模块不可用。”)PyCharm 请求网站中的错误

无法连接到 C# 中的本地数据库

Java 使用 SSL 握手失败连接到 SOAP Web 服务

如何在 jndi 中启用 ldap over ssl