在 websocket java 中禁用 SSL 认证
Posted
技术标签:
【中文标题】在 websocket java 中禁用 SSL 认证【英文标题】:Disable SSL certification in websocket java 【发布时间】: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 证书检查。
【问题讨论】:
【参考方案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 验证。有关示例,请参见此处***.com/a/64982379/6777695 如何在上面的代码中使用它? @Flav 您只需执行一次此代码(在创建套接字之前)。我还建议您查看@Hakan54 的评论。 在socketUri = new URI(sockPath);
之前使用了上面的代码,但是没有用。
我刚刚编辑了答案。你的 WebSocket 实现是什么?以上是关于在 websocket java 中禁用 SSL 认证的主要内容,如果未能解决你的问题,请参考以下文章