React-native websocket TLS连接
问题描述:
我试图使用websocket连接到使用react-native的TLS服务器。下面是我的代码(上+ Android的Windows上运行):React-native websocket TLS连接
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是否有效,即信任链是否有效。
但是,如果您正在使用自签名证书,通常会失败(至少很麻烦)。如果您需要一些帮助来生成一些自签名证书和相应的证书链,您可以看看here。另外,请参阅是否需要通过让客户端在连接时使用该文件作为参数来指定可信CA。
我一直在努力与使用自签名证书签名建立安全的WebSocket服务器(用于开发目的,在生产中正确的证书/ CA必须使用),但没有太多的成功,并恢复到使用非TLS websocket服务器。