在 Express 应用程序中使用 SSL
Using SSL in an Express application
我继承了一个我想进一步开发的应用程序。它基于 Express 和 Peerjs,有一个服务器和一个客户端 (vue.js) 应用程序。
应用程序的一部分是视频流。为了测试应用程序,我想从我自己网络中的不同设备访问它。这目前不起作用,因为该应用程序不使用 SSL,但 getUserMedia()
.
需要 SSL
但是,我无法使用 SSL。
这是服务器的app.js:
const Express = require("express")();
const { ExpressPeerServer } = require('peer');
const Http = require("https").Server(Express);
const Socketio = require("socket.io")(Http);
const fs = require('fs');
var privateKey = fs.readFileSync('key.pem');
var certificate = fs.readFileSync('cert.pem');
const peerServer = ExpressPeerServer(Http, {
debug: true,
key: 'peerjs',
allow_discovery: true,
ssl: {
key: privateKey,
cert: certificate
}
});
Express.use('/peerjs', peerServer);
/* some methods here */
Http.listen(3000, () => {
console.log("Listening at: 3000");
});
这是在客户端内部:
let Socket = io("https://192.168.178.28:3000");
let myPeer = new Peer(undefined, {
host: "192.168.178.28",
port: "3000",
path: "/peerjs",
key: "peerjs",
});
这是 vue.config.js:
module.exports = {
devServer: {
host: '192.168.178.28',
port: 443,
},
};
这对我不起作用。在 Chrome 中,如果我打开 https://192.168.178.28:443 会出现“ERR_SSL_PROTOCOL_ERROR”错误,如果我使用 http://.
,则会出现“ERR_SSL_VERSION_OR_CIPHER_MISMATCH”错误
在 Firefox 中,我收到“SSL_ERROR_RX_RECORD_TOO_LONG”消息。
有什么想法吗?
我明白了。如果以后有其他人遇到这个问题:
已将 app.js 更改为:
const app = require('express')();
const http = require('http').createServer(app);
const https = require('https');
var server = https.createServer({
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
},app);
const io = require("socket.io")(server);
const { ExpressPeerServer } = require('peer');
const customGenerationFunction = () => (Math.random().toString(36) + '0000000000000000000').substr(2, 16);
const peerServer = ExpressPeerServer(server, {
generateClientId: customGenerationFunction,
debug: true,
port: 3000,
key: 'peerjs',
ssl:{
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
},
allow_discovery: true
});
server.listen(3000, () => {
console.log("https listening at: 3000");
});
客户端内部:
let Socket = io.connect("https://192.168.178.28:3000");
let myPeer = new Peer(undefined, {
host: "192.168.178.28",
port: "3000",
path: "/peerjs",
key: "peerjs",
});
最后,vue.config.js:
module.exports = {
devServer: {
https: true
},
};
我继承了一个我想进一步开发的应用程序。它基于 Express 和 Peerjs,有一个服务器和一个客户端 (vue.js) 应用程序。
应用程序的一部分是视频流。为了测试应用程序,我想从我自己网络中的不同设备访问它。这目前不起作用,因为该应用程序不使用 SSL,但 getUserMedia()
.
但是,我无法使用 SSL。
这是服务器的app.js:
const Express = require("express")();
const { ExpressPeerServer } = require('peer');
const Http = require("https").Server(Express);
const Socketio = require("socket.io")(Http);
const fs = require('fs');
var privateKey = fs.readFileSync('key.pem');
var certificate = fs.readFileSync('cert.pem');
const peerServer = ExpressPeerServer(Http, {
debug: true,
key: 'peerjs',
allow_discovery: true,
ssl: {
key: privateKey,
cert: certificate
}
});
Express.use('/peerjs', peerServer);
/* some methods here */
Http.listen(3000, () => {
console.log("Listening at: 3000");
});
这是在客户端内部:
let Socket = io("https://192.168.178.28:3000");
let myPeer = new Peer(undefined, {
host: "192.168.178.28",
port: "3000",
path: "/peerjs",
key: "peerjs",
});
这是 vue.config.js:
module.exports = {
devServer: {
host: '192.168.178.28',
port: 443,
},
};
这对我不起作用。在 Chrome 中,如果我打开 https://192.168.178.28:443 会出现“ERR_SSL_PROTOCOL_ERROR”错误,如果我使用 http://.
,则会出现“ERR_SSL_VERSION_OR_CIPHER_MISMATCH”错误在 Firefox 中,我收到“SSL_ERROR_RX_RECORD_TOO_LONG”消息。
有什么想法吗?
我明白了。如果以后有其他人遇到这个问题:
已将 app.js 更改为:
const app = require('express')();
const http = require('http').createServer(app);
const https = require('https');
var server = https.createServer({
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
},app);
const io = require("socket.io")(server);
const { ExpressPeerServer } = require('peer');
const customGenerationFunction = () => (Math.random().toString(36) + '0000000000000000000').substr(2, 16);
const peerServer = ExpressPeerServer(server, {
generateClientId: customGenerationFunction,
debug: true,
port: 3000,
key: 'peerjs',
ssl:{
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
},
allow_discovery: true
});
server.listen(3000, () => {
console.log("https listening at: 3000");
});
客户端内部:
let Socket = io.connect("https://192.168.178.28:3000");
let myPeer = new Peer(undefined, {
host: "192.168.178.28",
port: "3000",
path: "/peerjs",
key: "peerjs",
});
最后,vue.config.js:
module.exports = {
devServer: {
https: true
},
};