ESFramework 使用技巧 -- 支持 SSL 加密的 WebSocket  (wss)

     在客户端采用WebSocket的程序中,经常需要使用SSL进行通信加密,最新的ESFramework的WebSocket引擎增加了对wss的支持。本文将通过一个示例来介绍在ESFramework中如何使用wss ,本文示例基于 ESFramework Demo -- 入门Demo(包含 .NET/Android/iOS/WebSocket ) 的示例源码进行改造 。

一. 服务端

1. 数字证书

      为测试方便,我们可以使用 CertificateCreator 制作一个用于本地测试的数字证书。

      运行 CertificateCreator.exe, 然后输入Common Name(比如Test)、密码、保存路径(比如D:\server.pfx),我们就可以得到包含私钥的证书server.pfx 。双击server.pfx ,即可安装证书。 

2. 服务端引擎设置

       在服务端RapidServerEngine初始化之前,添加如下代码设置其 WssOptions 属性:

        WssOptions wssOptions = new WssOptions( new X509Certificate2("D:\\server.pfx", "password") ,SslProtocols.Default ,false);
        rapidServerEngine.WssOptions = wssOptions;   

        设置完成后,启动服务端。 

二.客户端

1. 信任测试用的数字证书      

        由于上述生成的数字证书仅仅是用于测试的,而是不被正式认可的,所以,需要在浏览器设置中,将目标数字证书加入到信任列表。

        比如,在360浏览器中,可如下设置:

         

        在FireFox中,设置如下:

        

          将服务器的地址(https://127.0.0.1:4530)添加到例外中。  

2. 客户端引擎设置

        打开入门demo的Web端源码中的index.js文件,找到engine的Initialize方法,将 useWss 参数由false修改为true。

        然后将Web端的 index.html 文件拖入浏览器中运行即可。 

三. 运行效果

       登录一个wss客户端,一个ws客户端和一个.NET客户端,服务端的UI显示如下:

      

四. 特别注意

        ESFramework服务端为了支持能使用同一个TCP Port 同时服务于 wss客户端与其它类型的客户端(.NET、android、iOS、Xamarin、ws),采取了如下策略。

(1)由于wss通道必须在TCP连接刚建立时(收发消息前)就要先进行SSL加密,否则,后续的通信将无法正常进行。

(2)基于(1),在没有收发任何消息时,服务端就无法将wss客户端与其它客户端区分开来。

(3)为此采用的办法是:对于任何刚建立的TCP连接,先都不加密它,等收到的第一个消息来判断其消息的头标志。

(4)如果头标志不是ESFramework所规定的标志,则表示这第一个消息是密文,无法被解析,从而说明这个客户端是wss。于是将该客户端的ip放到cache中,并断开该连接。

(5)wss客户端会重新连上来,此时服务端从cache中发现已经存在目标ip,则判定其为wss客户端,于是立即使用SSL加密该通道,之后,该wss客户端就可以正常通信了。

(6)由于wss 客户端 IP在cache中的过期时间是 6秒左右,所以,如果一个客户端IP刚登录了wss客户端,那么在同一个IP上登录第二个客户端(任何客户端类型),就需要相隔6秒之后

 

-----------------------------------------------------------------------------------------------------------------------------------------------  

Q Q:168757008

官网:www.oraycn.com

导航

首页

官方网站

立即咨询 

站内搜索

ESFramework 通信框架

详细说明

SDK下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

详细说明

SDK下载

OMCS FAQ

版本变更记录

OrayTalk 企业即时通讯系统

详细说明

客户端下载

傲瑞实用组件

SDK下载

NPush 消息推送组件

StriveEngine 轻量级的通信引擎

MFile 语音视频录制组件

MCapture 语音视频采集组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

傲瑞组件 FAQ

授权

授权流程

产品授权说明

产品选购指南

授权SDK使用说明

其它

SDK使用技巧

联系我们

电话:027-87638960

Q Q:168757008

邮件:master@oraycn.com