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

Posted

技术标签:

【中文标题】信任java Websocket客户端中的所有证书【英文标题】:Trusting all certificates in java Websocket client 【发布时间】:2014-08-28 07:56:43 【问题描述】:

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

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

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

我描述了所有步骤:

    下载你要连接的服务器证书,你可以在你的浏览器中完成(在谷歌浏览器中点击页面url附近的锁) 使用以下命令创建密钥库(记住您输入的密码)

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

【讨论】:

以上是关于信任java Websocket客户端中的所有证书的主要内容,如果未能解决你的问题,请参考以下文章

在节点JS中为WebSocket(ws)使用自签名CA证书

接受用于安全 websocket 连接的服务器证书

将 Java syslog 客户端配置为信任自签名证书

带有客户端证书(crt,p12)的 OkHttp:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚

NodeJS 中的客户端 websocket 证书

Java WebSocket 获取客户端的专有名称