信任javaWebsocket客户端中的所有证书



首先,我知道信任所有证书可能存在的风险,但出于某些测试目的,我必须实现这一点。

如何强制我的客户端信任所有证书?我正在用javax.websocket 实现

我所做的只是简单地连接到像这样的ws

WebSocketContainer client = ContainerProvider.getWebSocketContainer();
try {
    session = client.connectToServer(ClientImpl.class, URI.create(uri));
} catch (DeploymentException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

我也遇到了同样的问题。我还没有找到任何解决方案,但我可以使用自签名证书。

我描述了所有步骤:

  1. 下载你想要连接的服务器证书,你可以从浏览器中下载(在谷歌chrome中,右键单击页面url附近的锁)
  2. 使用以下命令创建密钥库(记住您输入的密码)

keytool-import-alias localhost-file certificate_path-keystore your_new_keystore

我建议您使用ClientManager而不是WebSocketContainer。这允许您覆盖主机名验证。

我的代码

System.getProperties().put("javax.net.debug", "all"); //usefull to understand problems
System.getProperties().put(SSLContextConfigurator.KEY_STORE_FILE, your_new_keystore_path);
System.getProperties().put(SSLContextConfigurator.TRUST_STORE_FILE, your_new_keystore_path);
System.getProperties().put(SSLContextConfigurator.KEY_STORE_PASSWORD, the_password_you_entered);
System.getProperties().put(SSLContextConfigurator.TRUST_STORE_PASSWORD, the_password_you_enterede);   
ClientManager client = ClientManager.createClient();
SslEngineConfigurator sslEngineConfigurator = new SslEngineConfigurator(new SslContextConfigurator());
sslEngineConfigurator.setHostVerificationEnabled(false); //skip host verification
client.getProperties().put(ClientProperties.SSL_ENGINE_CONFIGURATOR, sslEngineConfigurator);
client.connectToServer(you_class_with_ws_methods, your_ws_uri);

you_class_with_ws_methods可以与WebSocketContainer使用相同有用资源:

https://tyrus.java.net/documentation/1.10/user-guide.html#d0e1128https://blogs.oracle.com/PavelBucek/entry/securing_websocket_applications_on_glassfish

相关内容

  • 没有找到相关文章

最新更新