JAVA8安全Websocket握手问题(Tyrus和Jetty)



我正在尝试在支持通过SSL安全传输的应用程序中实现一个Websocket客户端。该应用程序已经通过实现自定义密钥和信任管理器来支持HTTP上的标准SSL连接(这些自定义实施是在需要时提示用户的(。

我很难获得与我们的远程Websocket端点的安全连接。握手期间发生故障。我尝试了Websocket API(Tyrus和Jetty(的两个不同实现,并且两者都以相同的方式失败,这当然会导致我指出我们的SSL实现。

正如我提到的,失败在握手期间发生。似乎该连接无法弄清楚由服务器从服务器返回的受支持的当局签署的客户证书。我很想弄清楚我是否还没有正确地将客户端证书提供给WebSocket API,或者我们的自定义密钥/信托经理是否正在使用。

这是SSL调试日志的转储:

*** CertificateRequest
Cert Types: RSA, DSS
Cert Authorities:
(list of about 15 cert authorities supported by the server)
*** ServerHelloDone
Warning: no suitable certificate found - continuing without client authentication
*** CertificateChain
<empty>
***

我已经在我们的Trustmanager实现中设置了断点,以确定它们是否被调用,并且似乎目前尚未打电话给它们。

我一直在尝试进行几天的调试,并且用尽了尝试。

任何建议将不胜感激!

这是码头代码的片段:

SSLContext context = SSLContext.getInstance("TLS");
// getKeyManagers / getTrustManagers retrieves an 
// array containing the custom key and trust manager
// instances:
KeyManager[] km = getKeyManagers();
TrustManager[] tm = getTrustManagers();
context.init(km, tm, null);
SslContextFactory contextFactory = new SslContextFactory();
contextFactory.setContext(context);
WebSocketClient client = new WebSocketClient(contextFactory);
SimpleEchoClient echoClient = new SimpleEchoClient();
try { 
    client.start();
    ClientUpgradeRequest request = new ClientUpgradeRequest();
    Future<Session> connection = client.connect(echoClient, uri, request);
    Session session = connection.get();
    // if everything works, do stuff here
    session.close();
    client.destroy();
} catch (Exception e) {
    LOG.error(e);
}

您是否可以尝试使用venuctunauthorized:false,以便您的浏览器无法授权的证书会跳过授权。

var ws = new WebSocket('wss://localhost:xxxx', {
  protocolVersion: 8,
  origin: 'https://localhost:xxxx',
  rejectUnauthorized: false
});

相关内容

  • 没有找到相关文章

最新更新