背景:websocket在Html5里面有着举足轻重的地位,最近工做中须要对websocket接口进行压测,使用jmeter的websocket

sample进行,可是通常现网的websocket都是采用的wss://协议,直接使用ws://协议的较少,毕竟安全仍是很是重要的,这里就涉及到ssl协议,模拟websocket客户端,使用证书和公钥,摸索了半天终于摸索出来了。html

java websocket client

maven项目中引入git

org.java-websocket

Java-WebSocket

1.4.0

什么是wss

wss 是 Web Socket Secure 的简称, wss是websocket 在TLS之上的加密版本。web

如何获取证书,并使用keytool工具生成本地store秘钥文件

keytool -import -alias "my.store" -file wss.cer -keystore my.store

websocket ssl client 代码示例

首先继承抽象类WebSocketClient,并实现websocket的onMessage、onOpen、onClose、onError,其实就是websocket的事件浏览器

import java.net.URI;

import org.java_websocket.client.WebSocketClient;

import org.java_websocket.handshake.ServerHandshake;

class WebSocketClientInst extends WebSocketClient {

public WebSocketClientInst(URI serverUri ) {

super( serverUri );

}

@Override

public void onOpen( ServerHandshake handshakedata ) {

System.out.println( "Connected" );

}

@Override

public void onMessage( String message ) {

System.out.println( "got: " + message );

}

@Override

public void onClose( int code, String reason, boolean remote ) {

System.out.println( "Disconnected" );

}

@Override

public void onError( Exception ex ) {

ex.printStackTrace();

}

}

而后就是wss的重头戏了,这里面的核心实际上是SSLSocketFactory 和SSLSocket,感兴趣能够深刻百度了解下:安全

import org.java_websocket.enums.ReadyState;

import javax.net.ssl.KeyManagerFactory;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSocketFactory;

import javax.net.ssl.TrustManagerFactory;

import java.io.*;

import java.net.URI;

import java.security.KeyStore;

class SSLClientExample {

public static void main( String[] args ) throws Exception {

WebSocketClientInst chatclient = new WebSocketClientInst( new URI( "wss://ip:port/test/path" ) );

// load up the key store

String KEYSTORE = "xx/xxxx/my.store"; //基于证书生成的store秘钥文件的路径

String STOREPASSWORD = "123456"; //使用keytool工具时,输入的密码

String KEYPASSWORD = "123456";

KeyStore ks = KeyStore.getInstance( KeyStore.getDefaultType() );

File kf = new File( KEYSTORE );

ks.load( new FileInputStream( kf ), STOREPASSWORD.toCharArray() );

KeyManagerFactory kmf = KeyManagerFactory.getInstance( "SunX509" );

kmf.init( ks, KEYPASSWORD.toCharArray() );

TrustManagerFactory tmf = TrustManagerFactory.getInstance( "SunX509" );

tmf.init( ks );

SSLContext sslContext = null;

sslContext = SSLContext.getInstance( "TLS" );

sslContext.init( kmf.getKeyManagers(), tmf.getTrustManagers(), null );

SSLSocketFactory factory = sslContext.getSocketFactory();// (SSLSocketFactory) SSLSocketFactory.getDefault();

chatclient.setSocketFactory( factory );

chatclient.connectBlocking();

boolean loop = true;

int times = 0;

while (loop){

times++;

if (ReadyState.OPEN.equals(chatclient.getReadyState())) {

chatclient.send(getBytes("a.wav")); //发送二进制文件

}else {

System.out.println("还没ready, 继续进行中");

if (times<=10) {

Thread.sleep(1000);

}else{

System.out.println("超时");

break;

}

}

}

}

public static byte[] getBytes(String filePath){

byte[] buffer = null;

try {

File file = new File(filePath);

FileInputStream fis = new FileInputStream(file);

ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);

byte[] b = new byte[1000];

int n;

while ((n = fis.read(b)) != -1) {

bos.write(b, 0, n);

}

fis.close();

bos.close();

buffer = bos.toByteArray();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return buffer;

}

}

至此完成代码,你能够使用这个代码,而后实现jmeter的java sample,用来做压测了websocket

java写wss,JAVA模拟WebSocket客户端,支持wss ssl证书相关推荐

  1. JAVA模拟WebSocket客户端,支持wss ssl证书

    背景:websocket在Html5里面有着举足轻重的地位,最近工作中需要对websocket接口进行压测,使用jmeter的websocket sample进行,但是一般现网的websocket都是 ...

  2. java用HttpURLConnection发起HTTPS请求并跳过SSL证书,解决:unable to find valid certification path to requested targ

    java用HttpURLConnection发起HTTPS请求并跳过SSL证书 问题出现:unable to find valid certification path to requested ta ...

  3. VeriSign SSL服务器证书——128位支持型SSL证书(VeriSign Secure Site)_VeriSign数字证书产品...

    VeriSign SSL服务器证书--128位支持型SSL证书(VeriSign Secure Site) • 全球最为知名的SSL证书品牌 • 40/56/128/256 位自适用加密 • 支持主流 ...

  4. Java EE 7中的WebSocket客户端API

    在本文中,让我们探索谈论较少的Web Socket Client API,以及如何在Java EE 7容器本身中利用它. Web套接字服务器API规则 JSR 356的服务器端API(Java的Web ...

  5. Nginx配置WebSocket 【支持wss与ws连接】

    一.对wss与nginx代理wss的理解: 1.wss协议实际是websocket+SSL,就是在websocket协议上加入SSL层,类似https(http+SSL). 2.利用nginx代理ws ...

  6. java使用bks双向认证_客户端与服务器SSL双向认证(客户端:Android

    客户端与服务器SSL双向认证(客户端Android-服务端vc)-含源码(一)服务端已经生成了client.p12.server.p12.ca.p12:主要实现客户端过程(二)目录结构(三)客户端注 ...

  7. 微信小程序基于node.js的websocket服务器搭建和SSL证书申请、配置全家桶

    〇.前言 最近在研究微信小程序的开发,中间遇到了不少问题,趟了不少坑,这里和大家分享一下我的一些经验,希望能给大家提供一些帮助. 一.微信小程序的websocket服务器搭建 微信小程序的网络通信使用 ...

  8. 如何用JAVA写一个简单的电脑客户端应用

    前言: 我们学习了JAVA的application和applet,其中applet是需要打开编译软件或命令行才能弹出的那种窗口,和我们平时可以下载的软件不太一样.如何开发一个.exe文件? 其实和写正 ...

  9. java 写流,Java IO中的其他读写流

    RandomAccessFile 构造方法 //var1 文件路径,var 文件的读写模式 "r"只读,"w"只写,"rw"读写 publi ...

最新文章

  1. 分类问题-样本权重(sample_weight)和类别权重(class_weight)
  2. pg 主键系统信息_神仙打架:PG 和 MySQL 到底哪个更好用?
  3. (转载)C++ ofstream和ifstream详细用法
  4. 对 Oracle 备份与恢复 的补充说明
  5. 轻松理解spring IOC
  6. 安卓机更新系统会卡吗_安卓机可以用AirPods Pro吗?告诉你真实体验
  7. python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...
  8. Ubuntu技巧之xxx is not in the sudoers file解决方法
  9. 使用diff和patch制作及打补丁
  10. Android核心模块内容概述
  11. 2. Magento2 --- (2) theme --- structure
  12. 新安装的mysql设置密码
  13. 苹果plus html,iPhoneX 苹果8 8PLus区别:所有功能参数 最详细全面对比
  14. Python 进化算法的简单介绍和实现
  15. 用 MatLab 绘制立体心形
  16. 两万元的计算机什么配置,两万高配置电脑使用CAD非常卡顿怎么办
  17. 外贸客户开发系列 ,让你在领英Linkedin客户开发上事半功倍
  18. cadence allegro - E
  19. 超键、候选键、主键和外键的区别和联系
  20. WinCE驱动开发问题精华集锦 [转]

热门文章

  1. 美国只是个傀儡 真正的对手是黑暗帝国
  2. GridView常见问题
  3. [CORS:跨域资源共享] 同源策略与JSONP
  4. 什么是cmnet和cmwap
  5. Windows 经典桌面背后的故事
  6. python爬虫之字符集和编码
  7. C语言用户注册登录管理系统_JavaFX+SpringBoot+验证码功能的小型薪酬管理系统
  8. c语言 百度文库,百度文库C语言专本辅导第一二章.doc
  9. Android Studio 3.1 正式版
  10. 双击放大图片 手指移动图片位置