Java安全Websocket-从TLS证书文件加载SSL上下文并连接到WSS URI

Java安全Websocket-从TLS证书文件加载SSL上下文并连接到WSS URI,java,ssl,websocket,java-websocket,Java,Ssl,Websocket,Java Websocket,我正在寻找加载TLS证书文件(ssl\u cert\u auth\u params)的方法,该文件如下所示: -----BEGIN CERTIFICATE----- **************************************************************** **************************************************************** *************************************

我正在寻找加载TLS证书文件(
ssl\u cert\u auth\u params
)的方法,该文件如下所示:

-----BEGIN CERTIFICATE-----
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
************************
-----END CERTIFICATE-----
在Java WSS(安全WebSocket)客户端中

我可以使用以下内容轻松地在python中设置
ssl\u上下文

import ssl
import pathlib

ssl_context   = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
localhost_pem = pathlib.Path(__file__).resolve().parent / "../../folder/ssl_cert_auth_params"
ssl_context.load_verify_locations(localhost_pem)
import asyncio
import websockets

async def connect_to_uri(uri, ssl_context):
    ws = await websockets.connect(uri, ssl=ssl_context, ping_interval=3)
    return (ws)

loop = asyncio.get_event_loop()
ws = loop.run_until_complete(connect_to_uri(uri, ssl_context))
并使用以下命令连接到WSS uri:

import ssl
import pathlib

ssl_context   = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
localhost_pem = pathlib.Path(__file__).resolve().parent / "../../folder/ssl_cert_auth_params"
ssl_context.load_verify_locations(localhost_pem)
import asyncio
import websockets

async def connect_to_uri(uri, ssl_context):
    ws = await websockets.connect(uri, ssl=ssl_context, ping_interval=3)
    return (ws)

loop = asyncio.get_event_loop()
ws = loop.run_until_complete(connect_to_uri(uri, ssl_context))

但是我找不到一个简单的方法来使用java wss客户端库实现同样的功能

我不是websocket专家,但下面是一个片段,它可以为您在java中使用Jetty的websocket提供帮助:

我使用了以下库:


org.eclipse.jetty.websocket
websocket客户端
9.4.41.v20210516
io.github.hakky54
码头sslcontext启动
6.6.1
Java代码:

导入nl.altindag.ssl.ssl工厂;
导入nl.altindag.ssl.util.CertificateUtils;
导入nl.altindag.ssl.util.JettySlutils;
导入org.eclipse.jetty.client.HttpClient;
导入org.eclipse.jetty.websocket.api.Session;
导入org.eclipse.jetty.websocket.api.WebSocketListener;
导入org.eclipse.jetty.websocket.client.WebSocketClient;
导入java.net.URI;
导入java.nio.file.path;
公共类WebSocketExample{
公共静态void main(字符串[]args)引发异常{
var sslFactory=sslFactory.builder()
.withTrustMaterial(CertificateUtils.loadCertificate(path.get(“/path/to/certificate.pem”))
.build();
var sslContextFactory=JettySslUtils.forClient(sslFactory);
var httpClient=新的httpClient(sslContextFactory);
var webSocketClient=新的webSocketClient(httpClient);
webSocketClient.start();
var session=webSocketClient.connect(新的MyWebSocketListener(),新的URI(“ws://echo.websocket.org”).get();
session.getRemote().sendString(“您好!”);
}
私有静态类MyWebSocketListener实现WebSocketListener{
@凌驾
WebSocketBinary上的公共void(字节[]字节,int i,int i1){
System.out.println();
}
@凌驾
WebSockettext上的公共void(字符串响应){
System.out.println(响应);
}
@凌驾
WebSocketClose上的公共void(int i,字符串s){
系统输出打印项次(“关闭”);
}
@凌驾
WebSocketConnect上的公共void(会话){
System.out.println(“已连接”);
}
@凌驾
WebSocketError上的公共无效(可丢弃可丢弃){
System.out.println(“获取错误”);
}
}
}

Jetty SslContextFactory没有直接读取和使用pem文件的功能。因此,您将添加逻辑来读取pem文件并将其映射到密钥库对象,然后将其提供给TrustManager,然后从中创建SSLContext。因此,我建议我自己的图书馆隐藏这些冗长的内容。我希望您喜欢:)

您计划使用哪个java wss客户端库?目前,这是一个可以轻松实现此目的的库,当我有更多选择时,建议会被欣然接受尼斯!通常我也可以使用“wss://”端点URI,对吗?在接下来的几周里,当我能够正确地测试我的终点时,如果没有其他更好的答案,我会回来接受这一点。非常感谢。是的,我尝试了指向URI的示例wss链接,它成功了。但是,我无法测试SSL部分,因为我没有安全的wss服务器。所以我很想听听你的意见results@madx如果您有任何更新,您是否能够使用ssl进行尝试?