信任java Websocket客户端中的所有证书

时间:2014-08-28 07:56:43

标签: java ssl websocket java-websocket

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

如何强制我的客户信任所有证书?我正在使用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 个答案:

答案 0 :(得分:4)

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

我描述了所有步骤:

  1. 下载您要连接的服务器证书,您可以通过浏览器进行操作(在谷歌浏览器中点击页面网址附近的锁定右侧)
  2. 使用以下命令创建密钥库(记住您输入的密码)
  3. 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#d0e1128 https://blogs.oracle.com/PavelBucek/entry/securing_websocket_applications_on_glassfish