react -原生websocket TLS连接



我正在尝试使用websocket连接到使用react-native的TLS服务器。下面是我的代码(在windows + android上运行):

 var ws = new WebSocket('wss://hub.fingi-staging.com:20020',{
  rejectUnauthorized: false
});
ws.onopen = () => {
  // connection opened
  ws.send('something'); // send a message
};
ws.onmessage = (e) => {
  // a message was received
  console.log('message : ' + e.data);
};
ws.onerror = (e) => {
  // an error occurred
  console.log('error:'+e.message);
};
ws.onclose = (e) => {
  // connection closed
  console.log('close:'+e.code, e.reason);
};

但是,对于:error:java.security.cert.CertPathValidatorException: Trust anchor for certification path not found,它失败了。这是因为服务器使用自签名证书。

有办法解决这个问题吗?

回复有点晚了,但希望这能给其他人指明正确的方向。

我相信你得到的错误表明你缺少证书链文件,该文件用于验证用于签署服务器证书的CA是否有效,即信任链是否有效。

但是,如果您使用的是自签名证书,那么这通常会失败(至少会很麻烦)。如果您需要一些帮助来生成一些自签名证书和适当的证书链,可以查看这里。另外,查看是否需要通过让客户端在连接时使用该文件作为参数来指定受信任的CA。

我一直在努力使用自签名证书建立一个安全的websocket服务器(出于开发目的,在生产中必须使用适当的证书/CA),但没有太大的成功,并恢复到使用非tls websocket服务器。

如果有人碰巧在React-Native中实现安全的websocket连接,这是我今晚发现的:React-Native在使用安全的websocket连接时想要使用端口443。

让我们以上面原始海报的代码为例。他:

var ws = new WebSocket('wss://hub.fingi-staging.com:20020',{
  rejectUnauthorized: false
});

我发现对我有用的是:

var ws = new WebSocket('wss://hub.fingi-staging.com');

然后在您的WebSocket服务器上,确保您在端口443上提供所有服务,而不是端口20020(或您以前使用的任何端口)。例如,我的Python websocket服务器以前使用端口8765。然而,在React-Native中,你需要使用443端口来进行安全的websocket连接,否则事情将无法正常工作。

相关内容

  • 没有找到相关文章

最新更新