自从HTML5出来以后,使用WebSocket通信就变得火热起来,基于WebSocket开发的手机APP和手机游戏也越来越多。我的一些开发APP的朋友,开始使用WebSocket通信,后来觉得通信不够安全,想要对通信进行加密,于是自然而然地就想从ws升级到wss。在升级的过程中,就会存在旧的ws客户端与新的wss客户端同时连接到同一个服务器的情况。所以,如果同一个服务端,能同时支持ws和wss,那就太方便了。

一. 实现方案

  但是,要服务端同时支持ws与wss并不太容易,其难点主要在于:wss通道必须在TCP连接刚建立时(收发消息前)就要先进行SSL加密,否则,后续的通信将无法正常进行。如此一来,当同时存在ws和wss客户端时,服务器在尚未通信之前就无法具体分辨哪个是ws哪个是wss。那怎么办了?我们的解决方案,是采用试探法,该方案已经在 ESFramework 通信框架中实现。

(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秒之后。

   基于以上方案实现服务端后,我们接下来基于 ESFramework入门demo 来具体讲解一下如何在实际应用中同时支持ws和wss。

二. 服务端实现

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. 信任测试用的数字证书

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

比如在FireFox中,设置如下:

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

2. 客户端引擎设置

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

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

四. 运行效果

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

下载 Demo源码 。

如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?相关推荐

  1. 服务器ws证书,如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?...

    自从HTML5出来以后,使用WebSocket通信就变得火热起来,基于WebSocket开发的手机APP和手机游戏也越来越多.我的一些开发APP的朋友,开始使用WebSocket通信,后来觉得通信不够 ...

  2. http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎

    TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...

  3. springboot socket服务端_从零开始学SpringBoot之Spring Boot WebSocket:编码分析

    前言: 在上一篇文章中讲到了WebSocket的原理,这节中我们先简单的编码分析下,这样有助于在之后的实战编码. 说明: (1)编码中使用的Spring Boot版本是:1.5.8: (2) 使用We ...

  4. java websocket修改为同步_服务端向客户端推送消息技术之websocket的介绍

    websocket的介绍 在讲解WebSocket前,我们先来看看下面这种场景,在HTTP协议下,怎么实现. 需求: 在网站中,要实现简单的聊天,这种情况怎么实现呢?如下图: ​ 当发送私信的时候,如 ...

  5. java客户端带证书访问服务端_客户端与服务器SSL双向认证(客户端:java-服务端:java)...

    客户端与服务器SSL双向认证(java-java):含源码 (一)实现技术: JSSE(Java Security Socket Extension) 是Sun为了解决在Internet上的实现安全信 ...

  6. asr1601芯片平台实现ssl加密的websocket

    首先感谢SGuniver_22,本文实现内容,是在他实现的websocket基础上,移植而来. 他的博客:https://blog.csdn.net/SGuniver_22 他的github:http ...

  7. websocket测试工具,支持ws wss服务端和客户端

    介绍一个名为:WebsocketMan的websocket测试工具,支持ws wss服务端和客户端.可以将请求保存为文件,支持header非常方便测试.支持Windows Linux macOS系统. ...

  8. 使用HTML5的WebSocket实现服务端和客户端数据通信(有演示和源码)

    WebSocket协议是基于TCP的一种新的网络协议.WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信. ...

  9. 用C语言解析通讯协议数据,C/C++知识点之服务端使用c++实现websocket协议解析及通信...

    C/C++知识点之服务端使用c++实现websocket协议解析及通信 小标 2018-12-03 来源 : 阅读 2289 评论 0 摘要:本文主要向大家介绍了 C/C++知识点之服务端使用c++实 ...

最新文章

  1. 小心陷阱:二维动态内存的不连续性
  2. Leetcode 62.不同路径 (每日一题 20210701)
  3. zeal刷新不出来_推进重涂市场标准化,立邦率先推出刷新服务“八大验收标准”...
  4. golang 学习笔记
  5. linux内存布局和地址空间布局随机化(ASLR)下的可分配地址空间
  6. c语言指针测试代码,一个关于C语言指针的测试
  7. JAVA_if或者怎么用_Java条件语句if的使用方法介绍
  8. 《老路用得上的商学课26—30》经济模式
  9. c语言编译是繁体字,cconv实现简体/繁体转换
  10. 简历写成这样,让我成为这一届的面霸
  11. 【html5期末大作业】基于HTML仿QQ音乐官网网站
  12. 初学者入门编程最开始要学什么?
  13. Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training 详解
  14. 大漠穷秋:一个写代码的浪人|码云封面人物第 17 期
  15. 圣诞之歌:クリスマス タイム和My Baby Grand~ぬくもりが欲しくて~ ZARD
  16. Altium Designer使用介绍和界面介绍
  17. NAS外网远程访问的方式
  18. java(jdk 1.8 64位)连接中控考勤机
  19. Java流程控制和方法
  20. 《SQL必知必会》第十三课 创建高级联结表 使用不同类型的联结 使用带聚集函数的联结 使用联结时应注意的问题

热门文章

  1. Android数据存储(二)----PreferenceFragment详解
  2. 计算机word2003试题,计算机应用基础Word2003试题新
  3. WPF DataGrid 获取选中 一行 或者 多行
  4. MATLAB中的左除和右除
  5. jquery获取复选框checkbox被选中的值
  6. 用计算机电脑怎么做ppt软件,电脑做ppt的软件叫什么
  7. 国产服务器(aarch64) Kettle 修改
  8. python文本字符分析
  9. http://wenzhang.ztcztc.com/Detail.aspx?id=70537498-7FD3-8992-552B-27716F9315F8
  10. 对计算机专业学生的忠告