java写wss,JAVA模拟WebSocket客户端,支持wss ssl证书
背景: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证书相关推荐
- JAVA模拟WebSocket客户端,支持wss ssl证书
背景:websocket在Html5里面有着举足轻重的地位,最近工作中需要对websocket接口进行压测,使用jmeter的websocket sample进行,但是一般现网的websocket都是 ...
- 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 ...
- VeriSign SSL服务器证书——128位支持型SSL证书(VeriSign Secure Site)_VeriSign数字证书产品...
VeriSign SSL服务器证书--128位支持型SSL证书(VeriSign Secure Site) • 全球最为知名的SSL证书品牌 • 40/56/128/256 位自适用加密 • 支持主流 ...
- Java EE 7中的WebSocket客户端API
在本文中,让我们探索谈论较少的Web Socket Client API,以及如何在Java EE 7容器本身中利用它. Web套接字服务器API规则 JSR 356的服务器端API(Java的Web ...
- Nginx配置WebSocket 【支持wss与ws连接】
一.对wss与nginx代理wss的理解: 1.wss协议实际是websocket+SSL,就是在websocket协议上加入SSL层,类似https(http+SSL). 2.利用nginx代理ws ...
- java使用bks双向认证_客户端与服务器SSL双向认证(客户端:Android
客户端与服务器SSL双向认证(客户端Android-服务端vc)-含源码(一)服务端已经生成了client.p12.server.p12.ca.p12:主要实现客户端过程(二)目录结构(三)客户端注 ...
- 微信小程序基于node.js的websocket服务器搭建和SSL证书申请、配置全家桶
〇.前言 最近在研究微信小程序的开发,中间遇到了不少问题,趟了不少坑,这里和大家分享一下我的一些经验,希望能给大家提供一些帮助. 一.微信小程序的websocket服务器搭建 微信小程序的网络通信使用 ...
- 如何用JAVA写一个简单的电脑客户端应用
前言: 我们学习了JAVA的application和applet,其中applet是需要打开编译软件或命令行才能弹出的那种窗口,和我们平时可以下载的软件不太一样.如何开发一个.exe文件? 其实和写正 ...
- java 写流,Java IO中的其他读写流
RandomAccessFile 构造方法 //var1 文件路径,var 文件的读写模式 "r"只读,"w"只写,"rw"读写 publi ...
最新文章
- 分类问题-样本权重(sample_weight)和类别权重(class_weight)
- pg 主键系统信息_神仙打架:PG 和 MySQL 到底哪个更好用?
- (转载)C++ ofstream和ifstream详细用法
- 对 Oracle 备份与恢复 的补充说明
- 轻松理解spring IOC
- 安卓机更新系统会卡吗_安卓机可以用AirPods Pro吗?告诉你真实体验
- python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...
- Ubuntu技巧之xxx is not in the sudoers file解决方法
- 使用diff和patch制作及打补丁
- Android核心模块内容概述
- 2. Magento2 --- (2) theme --- structure
- 新安装的mysql设置密码
- 苹果plus html,iPhoneX 苹果8 8PLus区别:所有功能参数 最详细全面对比
- Python 进化算法的简单介绍和实现
- 用 MatLab 绘制立体心形
- 两万元的计算机什么配置,两万高配置电脑使用CAD非常卡顿怎么办
- 外贸客户开发系列 ,让你在领英Linkedin客户开发上事半功倍
- cadence allegro - E
- 超键、候选键、主键和外键的区别和联系
- WinCE驱动开发问题精华集锦 [转]