我创建了一个简单的WebRTC应用程序,可以很好地测试本地主机;但是,除非你有安全的连接,否则WEBRTC没有多大用处,因为除非你有HTTP,否则浏览器现在不会运行GetUserMedia,因此我“尝试”将其升级为SSL-TLS。下面是我的两个应用程序并排的屏幕截图,一个是安全的(不工作),另一个是非安全的(工作)
如上所示,localhost'connect'而HTTPs'无法建立连接'。我是SSL新手,所以这可能很简单。只是希望更多的关注这一点。
我知道我的HTTPS服务器安全地连接了Javascript,请参阅下面的图片
以下是我的代码段。任何帮助将不胜感激:
SSL客户端 - Client.JS
var connection = new WebSocket('wss://localhost:8443'),
name = "";
非安全客户端 - Client.JS
var connection = new WebSocket('ws://localhost:8888'),
name = "";
非安全JS服务器 - index.JS
var WebSocketServer = require('ws').Server,
wss = new WebSocketServer({ port: 8888 }),
users = {};
wss.on('connection', function (connection) {
connection.on('message', function (message) .....
安全JS服务器 - SSLindex.JS
Var https = require('https'),
fs = require('fs'),
express = require('express'),
app = express();
var wss = https.createServer({
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.crt'),
ca: fs.readFileSync('ca.crt'),
requestCert: true,
rejectUnauthorized: false
}, app).listen('8443', function() {
console.log("Secure Express server listening on port 8443");
});
app.use("/", function(req, res, next)
{
res.send("index.js is working!");
});
答案 0 :(得分:4)
对于开发人员而言,chrome会将localhost
视为安全起源
如果您使用的是http://localhost或ws:// localhost,则不会涉及SSL,因此它在右侧屏幕截图中工作得很好。
但对于https
或wss
,浏览器将验证SSL证书颁发机构。
使用wss:// localhost:8443 /
解决websocket连接问题
临时解决方法:打开https://localhost:8443/网址,点击Adavced =>允许浏览器例外。继续
实际解决方案:为节点服务器(node.kali2016.com)分配域名,并使用授权SSL证书配置节点。然后更换
var connection = new WebSocket('wss://localhost:8443')
与
var connection = new WebSocket('wss://yourdomainname:8443')
答案 1 :(得分:1)
我能够通过使用服务器的IP地址而不是localhost来使我的EasyRTC页面通过HTTPS工作。
所以:
https://localhost:8443/没有用。返回连接已关闭错误。
https://192.168.0.113:8443/工作正常并按原样显示网页。
这也可能适用于其他人。