我有一个在 SSL 安全服务器上运行的 AngularJS 应用程序。现在我想通过 websocket 联系一个 RaspberryPI 来获取一些流数据。树莓没有自己的网络服务器(nginx/apache),所以我不能使用例如letsencrypt,但只能使用自签名证书。问题是它不起作用,我找不到有效的解决方案(花了 6 小时阅读论坛后)。这是我的代码:
我通过以下方式创建了我的自签名证书:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes
在 AngularJS 中,我做的很简单:
const ip = IPADDRESS:9030
connection = new WebSocket('wss://' + ip);
一个节点服务器正在 Raspberry 上运行。它看起来像这样:
const net = require('net');
const fs = require('fs');
const https = require('https');
var options = {
key: fs.readFileSync('ssl/key.pem'),
cert: fs.readFileSync('ssl/cert.pem'),
requestCert: false,
rejectUnauthorized: false
};
//pass in your express app and credentials to create an https server
const httpsServer = https.createServer(options);
httpsServer.listen(9030);
/**
* server
*/
let connections = {};
let WebSocketServer = require('ws').Server;
let wss = new WebSocketServer({server: httpsServer}),
wss.on('connection', function(ws) {
...
}
当启动服务器node server.js
并启动我的 AngularJS 应用程序时,我收到错误消息:
WebSocket connection to 'wss://IPADDRESS:9030/' failed: Error in connection establishment: net::ERR_CERT_AUTHORITY_INVALID
我该怎么做才能让它工作?谢谢你的帮助!