【问题标题】:Disable SSL certification in websocket java在 websocket java 中禁用 SSL 认证
【发布时间】:2021-09-28 12:17:12
【问题描述】:

我有 java websocket 连接,它尝试登录到服务器,然后建立 websocket 连接。 websocket 类具有连接套接字连接的机制,其中 websocket 类构造函数的主类调用。

WebSocket(URI serverUri, Map<String, String> head) {
        super(serverUri, head);
    }
socketUri = new URI(sockPath);
Map<String, String> head = new HashMap<>();
head.put("Authorization", "Bearer ".concat(headerToken));
client = new WebSocket(websocketUri, head);
client.setServerWebSocketUrlPathsockPath);
client.connect();

如何建立套接字连接以禁用 SSL 证书检查。

【问题讨论】:

    标签: java ssl websocket


    【解决方案1】:

    虽然禁用 SSL 证书检查不是好的做法,但这里有一个解决方案:

    以下代码来自Nakov.com

        // Create a trust manager that does not validate certificate chains
            TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }
                    public void checkClientTrusted(X509Certificate[] certs, String authType) {
                    }
                    public void checkServerTrusted(X509Certificate[] certs, String authType) {
                    }
                }
            };
     
            // Install the all-trusting trust manager
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
     
            // Create all-trusting host name verifier
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
     
            // Install the all-trusting host verifier
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
    

    【讨论】:

    • 我建议使用自定义 X509ExtendedTrustManager 而不是 X509TrustManager,因为它会部分禁用 SSL 验证。有关示例,请参见此处stackoverflow.com/a/64982379/6777695
    • 如何在上面的代码中使用它? @Flav
    • 您只需执行一次此代码(在创建套接字之前)。我还建议您查看@Hakan54 的评论。
    • socketUri = new URI(sockPath);之前使用了上面的代码,但是没有用。
    • 我刚刚编辑了答案。你的 WebSocket 实现是什么?
    猜你喜欢
    • 2019-06-28
    • 2012-10-16
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多