如果有应用程序需要用SSL/TLS来加密websocket连接,可以参考以下的方法。
第一步,下载cmake。
https://cmake.org/download/
百度网盘
https://pan.baidu.com/s/1kXmYALT
第二步,安装OpenSSL。
在OpenSSL的官网上只有源代码下载,并没有编译好的安装包。
为了避免搭建编译环境的麻烦可以从wiki上下载编译后好的安装包。
https://wiki.openssl.org/index.php/Binaries
本文以32位版本的1.0.2n为例。
百度网盘
https://pan.baidu.com/s/1htYluYg
用缺省的安装路径和缺省的安装选项,安装完成后OpenSSL会在C盘OpenSSL-Win32目录下。
第三步,选一个库,以libwebsockets为例。
https://libwebsockets.org/
代码在github上
https://github.com/warmcat/libwebsockets/commits/v2.4-stable
百度网盘
https://pan.baidu.com/s/1qd--BDDhJ4EXODKGRwLhdQ
修改后可以在windows中编译的版本
https://pan.baidu.com/s/18nM3LgHmLwigZVMI8u6k3Q
编译libwebsockets需要vs2010。
第四步,生成一套证书给websocket。
把下面的内容拷贝到一个文本文件中,并命名为sign.cnf文件,放到C:\OpenSSL-Win32\bin中 。
[san_section]
subjectAltName= @san_names
[san_names]
DNS.1 = mytest
运行如下命令生成证书。
C:\OpenSSL-Win32\bin>openssl genrsa -out cawss.key 2048
C:\OpenSSL-Win32\bin>openssl req -new -x509 -nodes -sha512 -days 7300 -subj "/CN=WSS CA" -key cawss.key -out cawss.cer
C:\OpenSSL-Win32\bin>openssl genrsa -out libwebsockets-test-server.key.pem 2048
C:\OpenSSL-Win32\bin>openssl req -new -nodes -sha512 -key libwebsockets-test-server.key.pem -subj "/CN=mytest" -out libwebsockets-test-server.csr
C:\OpenSSL-Win32\bin>openssl x509 -req -sha512 -days 7300 -in libwebsockets-test-server.csr -set_serial 01 -CA cawss.cer -CAkey cawss.key -extensions san_section -extfile sign.cnf -out libwebsockets-test-server.pem
第五步,导入根证书cawss.cer,并且把libwebsockets-test-server.key.pem和libwebsockets-test-server.pem拷贝到C:\Program Files (x86)\libwebsockets\share\libwebsockets-test-server中。
第六步,运行WebSocketServer。
libwebsockets-test-echo.exe -s
有如下提示出现,就说明已经在使用SSL了。
NOTICE: Using SSL mode
第七步,用一个简单的网页来测试WebSocket。
把以下内容拷贝到一个文本文件中,并命名为index.html,放入IIS中。
<!DOCTYPEHTML>
<html>
<head>
<meta charset="utf-8">
<title>newbie(runoob.com)</title>
<scripttype="text/javascript">
function WebSocketTest()
{
if ("WebSocket" inwindow)
{
alert("Your browsersupports WebSocket!");
// open web socket
var ws = newWebSocket("wss://mytest:7681");
ws.onopen = function()
{
// Web Socket connected,using send() to send data
ws.send("senddata");
alert("sending...");
};
ws.onmessage = function (evt)
{
var received_msg = evt.data;
alert("receiving...");
};
ws.onclose = function()
{
// close websocket
alert("closing...");
};
}
else
{
// browser does not support WebSocket
alert("Your browser doesnot support WebSocket!");
}
}
</script>
</head>
<body>
<div id="sse">
<ahref="javascript:WebSocketTest()">run WebSocket</a>
</div>
</body>
</html>
以上网页内容来自
http://www.runoob.com/html/html5-websocket.html
做了少量修改。
点击runWebSocket后弹出如下窗口,就成功了。
3977

被折叠的 条评论
为什么被折叠?



