使用wss和HTTPS / TLS保护WebSocket的安全

是这个博客的第50条提示,是的!

技术提示#49说明了如何使用用户名/密码和Servlet安全机制保护WebSocket的安全。 本技术提示将说明如何在WildFly上使用HTTPS / TLS保护WebSocket。

让我们开始吧!

  1. 创建一个新的密钥库:
    keytool -genkey -alias websocket -keyalg RSA -keystore websocket.keystore -validity 10950
    Enter keystore password:
    Re-enter new password:
    What is your first and last name?[Unknown]:  Arun Gupta
    What is the name of your organizational unit?[Unknown]:  JBoss Middleware
    What is the name of your organization?[Unknown]:  Red Hat
    What is the name of your City or Locality?[Unknown]:  San Jose
    What is the name of your State or Province?[Unknown]:  CA
    What is the two-letter country code for this unit?[Unknown]:  US
    Is CN=Arun Gupta, OU=JBoss Middleware, O=Red Hat, L=San Jose, ST=CA, C=US correct?[no]:  yesEnter key password for <websocket>(RETURN if same as keystore password):
    Re-enter new password:

    使用“ websocket”作为便捷密码。

  2. 下载WildFly 8.1 ,解压缩,然后将“ websocket.keystore”文件复制到standalone/configuration目录standalone/configuration目录中。
  3. 以以下方式启动WildFly:
    ./bin/standalone.sh
  4. 使用jboss-cli连接至它:
    ./bin/jboss-cli.sh -c
  5. 将新的安全领域添加为:
    [standalone@localhost:9990 /] /core-service=management/security-realm=WebSocketRealm:add()
    {"outcome" => "success"}

    并配置它:

    [standalone@localhost:9990 /] /core-service=management/security-realm=WebSocketRealm/server-identity=ssl:add(keystore-path=websocket.keystore, keystore-relative-to=jboss.server.config.dir, keystore-password=websocket)
    {"outcome" => "success","response-headers" => {"operation-requires-reload" => true,"process-state" => "reload-required"}
    }
  6. 将新的HTTPS侦听器添加为:
    [standalone@localhost:9990 /] /subsystem=undertow/server=default-server/https-listener=https:add(socket-binding=https, security-realm=WebSocketRealm)
    {"outcome" => "success","response-headers" => {"process-state" => "reload-required"}
    }
  7. 可以从github.com/javaee-samples/javaee7-samples/tree/master/websocket/endpoint-wss获得一个简单的示例,以显示基于TLS的WebSocket安全性。 克隆工作空间并将目录更改为“ websocket / endpoint-wss”。 该示例的部署描述符具有:
    <security-constraint><web-resource-collection><web-resource-name>Secure WebSocket</web-resource-name><url-pattern>/*</url-pattern></web-resource-collection><user-data-constraint><transport-guarantee>CONFIDENTIAL</transport-guarantee></user-data-constraint>
    </security-constraint>

    这样可以确保任何传入此应用程序的请求都将自动定向到HTTPS URL。

  8. 通过提供以下命令来部署样本:
    mvn wildfly:deploy

现在访问http:// localhost:8080 / endpoint-wss重定向到https:// localhost:8080 / endpoint-wss 。 浏览器可能会抱怨自签名证书。 例如,Chrome显示以下警告:

techtip50-certificate-chrome

Safari显示以下警告:

techtip50证书

在任何一种情况下,请单击“继续到本地主机”或“继续”以继续进行。 然后,建立安全的WebSocket连接。

要理解的另一个相关要点是,不能从受https保护的页面建立不安全的WebSocket连接。 例如我们示例中的以下代码:

new WebSocket("ws://localhost:8080/endpoint-wss/websocket");

将在Chrome开发者工具中引发以下异常:

[blocked] The page at 'https://localhost:8443/endpoint-wss/index.jsp' was loaded over HTTPS, but ran insecure content from 'ws://localhost:8080/endpoint-wss/websocket': this content should also be loaded over HTTPS.
Uncaught SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.

请享用!

翻译自: https://www.javacodegeeks.com/2014/10/securing-websocket-using-wss-and-httpstls.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时钟同步及其应用(接上一篇)

在linux下做的时钟同步的工作终于暂时告一段落了。 前面简单的做了客户端和服务器端的同步&#xff0c;在基于时间同步的机制上&#xff0c;将系统的1s的时间划分多个时槽。由于此时间同步应用在分布式系统中&#xff0c;涉及到多个客户端和服务器通信的问题&#xff0c;因此划…

Java性能调优调查结果(第二部分)

这是系列文章的第二篇&#xff0c;我们将分析2014年10月进行的性能调整调查的结果。如果您尚未阅读第一部分&#xff0c;我们建议从此处开始 。 第二部分将重点监视Java应用程序的性能问题。 特别是&#xff0c;我们尝试回答以下问题&#xff1a; 人们如何发现性能问题&#x…

HDU 2094 产生冠军

判断顶点入度是否唯一即可。如果入度为0的节点只有一个&#xff0c;输出Yes&#xff0c;否则输出No。 代码&#xff1a; 1 #include<iostream>2 #include<cstring>3 4 using namespace std;5 6 int len;7 int map[1001][1001];8 char name[1001][100];9 10 int fu…

简单的css缩放动画,仿腾讯新闻的分享按钮和美团app底部的图标样式

最近看到一些好看的hover的图形缩放效果。然后自己就写了下&#xff0c;发现这2种效果都不错。如果伙伴们更好的实现方式可以在下面留言哦~ 还有美团的效果&#xff0c;我就不展示了&#xff0c;喜欢的可以去app应用上看看。 这两种效果&#xff0c;其实实现的原理是一样的&…

Java性能调优调查结果(第一部分)

我们在2014年10月进行了Java性能调优调查。该调查的主要目的是收集对Java性能世界的见解&#xff0c;以改进Plumbr产品。 但是&#xff0c;我们也很高兴与您分享有趣的结果。 我们收集的数据为进行冗长的分析提供了素材&#xff0c;因此我们决定将结果划分为一系列博客文章。 这…

asp.net ViewState详解

ViewState是一个被误解很深的动物了。我希望通过此文章来澄清人们对ViewState的一些错误认识。为了达到这个目的&#xff0c;我决定从头到尾详细的描述一下整个ViewState的工作机制&#xff0c;其中我会同时用一些例子说明我文章中的观点&#xff0c;结论。比如我会用静态控件(…

OSGi Testsuite:引入类名过滤器

OSGi Testsuite是一个JUnit测试运行程序 &#xff0c;它动态地收集要执行的测试类。 它已经由我的同伴Rdiger大约一年前出版&#xff0c;并且已经在某些项目中证明是有用的。 但是对于gonsole&#xff0c;我们必须使用一个难看的补丁&#xff0c;因为1.0版仅支持.*Test后缀匹配…

javascript数字验证(转)

转自http://www.cnblogs.com/lovelace821/archive/2009/04/27/1444654.html js验证数字 javascript限制输入的只能是数字&#xff0c;判断event.keyCode的值&#xff0c;并将它限定只能为数字&#xff0c;如果不是数字&#xff0c;则返回错误&#xff0c;如果是数字&#xff0c…

需要微缓存吗? 营救记忆

缓存解决了各种各样的性能问题。 有很多方法可以将缓存集成到我们的应用程序中。 例如&#xff0c;当我们使用Spring时&#xff0c;可以轻松使用Cacheable支持。 非常简单&#xff0c;但我们仍然必须配置缓存管理器&#xff0c;缓存区域等。有时&#xff0c;就像用大锤砸破坚果…

es6 对象的扩展

1.属性的简洁表示法function f(x,y) {return {x,y};}// 等同于function f(x,y){return {x:x,y:y};}f(1,2)   // Object {x:1,y:2}例如&#xff1a;let birth 2000/01/01;const Person {name: 张三&#xff0c;// 等同于 birth: birthbirth,// 等同于hello: function()...he…

windows下命令行修改系统时间;修改系统时间的软件

找了很久,都没有找到,还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片. 而我由于某些原因想自动化修改系统时间,所以找windows下修改系统时间的软件 没有找到. 有一个 意天禁止修改系统时间开发包(系统时间保护组件) 1.0.0.1 ,可以禁…

如何摆脱JavaFX中的重点突出显示

今天&#xff0c;有人问我是否知道摆脱JavaFX控件&#xff08;分别是按钮&#xff09;的焦点突出的方法&#xff1a; 有关此问题的大多数文章和提示建议添加&#xff1a; .button:focused {-fx-focus-color: transparent; }但是使用这种样式&#xff0c;仍然会留下这样的光芒…

extjs 基础部分

创建对象的方法&#xff1a; 使用new 关键字创建对象。 new classname ([config]) 使用Ext.create方法创建。 Ext.create(classname,[config]) new Ext.Viewport({}) 修改为Ext.create(Ext.Viewport,{}) Ext.widget 或Ext.createWidget 创建对象 使用Ext.ns 或者Ext.namespace…

Java时区处理初学者指南

基本时间观念 大多数Web应用程序必须支持不同的时区&#xff0c;而正确处理时区绝非易事。 更糟糕的是&#xff0c;您必须确保各种编程语言&#xff08;例如&#xff0c;前端JavaScript&#xff0c;中间件中的Java和作为数据存储库的MongoDB&#xff09;之间的时间戳是一致的。…

Android工具HierarchyViewer 代码导读(3) -- 后台代码

在上文中&#xff0c;我们讲解了如何把HierarchyViewer的项目导入到Eclipse中&#xff0c;以便更高效阅读代码。本文将讲解HierarchyViewer的后台代码&#xff0c;建议大家可以先阅读<Android工具HierarchyViewer代码导读(1) -- 功能实现演示>一文, 其中的代码演示了Hier…

Extjs 数据代理

Ext.data.proxy.Proxy 代理类的根类 客户端代理&#xff1a; 1.LocalStorageProxy&#xff1a;将数据存储在localStorage中&#xff0c;此种方式可以持久的将数据存储在客户端 要使用代理&#xff0c;我们首先要有一个数据模型类&#xff0c;我们定义一个简单的Person类&…

WildFly 8.2.0.Final版本–更改的快速概述

自从我上次在此博客上写作以来已经有一段时间了。 尽管我有一些我想写博客的主题&#xff0c;但我只是没有足够的时间来做。 在看到JBoss社区成员之一的邮件后&#xff0c;我终于决定今天写这篇文章&#xff0c;检查为什么最近这里没有任何更新&#xff08;感谢检查&#xff0c…

Ph.D Grind 阅读感想 By 张雄

#Ph.D Grind是Xin Zou老师推荐的一本书&#xff0c;邮件里本来说是要在三周内读完的&#xff0c;不料看了个Preface之后再也放不下&#xff0c;最终一口气地看完了。 #看完之后很有感触&#xff0c;之前也阅读过一本讲如何规划研究生涯的书&#xff0c;但是那是一本从教授的角度…

VUE 入门基础(3)

三&#xff0c;模板语法 Vue将模板编译成虚拟DOM渲染函数&#xff0c;结合响应系统&#xff0c;在应用状态改变时&#xff0c;vue能够智能地计算出重新渲染组件的最小代价并DOM操作上。 插值&#xff0c;文本 数据绑定常见的形式就是使用“Mustache”语法&#xff08;双大括号&…

SVG 使用

SVG即Scalable Vector Graphics可缩放矢量图形&#xff0c;使用XML格式定义图形&#xff0c; 主要优势在于可缩放的同时不会影响图片的质量。 SVG 在html 中常用的方法 1.使用<img>元素来嵌入SVG图像 <img src”http://www.w3school.com.cn/svg/rect1.svg” width”…