在现代网络应用中,数据的安全性变得越来越重要。SSL/TLS安全层允许以安全的方式传输HTTP和WebSocket信息。本文将介绍如何使用Spike-Engine实现简单安全的WebSocket通信。
首先,需要创建一个自签名证书。有许多方法可以做到这一点,但发现Pluralsight提供了一个非常方便的工具,可以一键生成证书。创建证书后,需要生成一个包含私钥的.PFX文件,以便服务器可以进行身份验证。将证书保存在服务器的数据文件夹中,并告诉Visual Studio将其作为内容发布。Spike-Engine会自动扫描数据文件夹中的任何pfx文件,并使用第一个可用的证书。另一种提供证书的方法是使用Service.Tls.Certificate属性,该属性可以解析TlsProvider,如果有特殊要求,可以自己实现它。
服务器端的实现非常简单。如上所示的截图,有一个简单的协议,发送一个秘密消息,并回显响应。以下是XML配置示例:
<operation name="SecretMessage" direction="Pull" suppresssecurity="true">
<incoming>
<member name="Name" type="String" />
<member name="Message" type="String" />
</incoming>
<outgoing>
<member name="Name" type="String" />
<member name="Message" type="String" />
</outgoing>
</operation>
唯一的区别是有Certificate.pfx,并且需要让服务器监听端口443,这是HTTPS和WSS的默认端口。在这个例子中,还告诉服务器为托管一些文件,这样可以通过HTTPS访问它们,避免了启动另一个Web服务器的麻烦。在实践中,可以使用IIS来托管网站,并通过安全套接字进行访问。
Service.Http.Host("/index", "../../../MySecret.Client/index.html");
Service.Http.Host("/spike-sdk.js.src.js", "../../../MySecret.Client/spike-sdk.js.src.js");
Service.Listen(new TcpBinding(IPAddress.Any, 80), new TcpBinding(IPAddress.Any, 443));
示例客户端将通过安全的WebSocket通道不断向服务器发送消息,服务器将回显这些消息。以下是客户端的实现代码:
var server, message = 0;
function sendSecret(){
var secret = "Secret #" + (++message);
server.secretMessage("Bob", secret);
}
server = new spike.ServerChannel('https://127.0.0.1');
server.on('connect', function () {
server.on('secretMessageInform', function (p) {
var element = document.getElementById("response");
element.innerHTML = "" + p.name + ": " + p.message;
});
setInterval(sendSecret, 200);
});
创建通道时,使用https协议,这告诉底层的socket.io连接使用安全的WebSocket通信通道。这将在wss://127.0.0.1端点上发出连接消息。