如何将此http Node.Js转移到https上运行?



最近我创建了一个使用http的node js和webrtc项目。但我通知说,webrtc只适用于https。那么我如何将这个基于http的节点js文件传输到基于https的节点js文件?请帮帮我。

我真的不知道该怎么做。所以请帮我做吧。我们需要的是通过https运行这个文件。http中没有。如您所见,下面的代码只使用http。因为webtc需要在https上运行,我只需要让这个文件也在https上运行
var hat = require('hat')
var http = require('http')
var nodeStatic = require('node-static')
var ws = require('ws')
var PORT = process.argv[2] || 4000
var httpServer = http.createServer()
var staticServer = new nodeStatic.Server('./public')
var wsServer = new ws.Server({ server: httpServer })
var peers = {}
var waitingId = null
var count = 0
httpServer.on('request', function (req, res) {
req.addListener('end', function () {
staticServer.serve(req, res)
}).resume()
})
wsServer.on('connection', onconnection)
function onconnection (peer) {
var send = peer.send
peer.send = function () {
try {
send.apply(peer, arguments)
} catch (err) {}
}
peer.id = hat()
peers[peer.id] = peer
peer.on('close', onclose.bind(peer))
peer.on('error', onclose.bind(peer))
peer.on('message', onmessage.bind(peer))
count += 1
broadcast(JSON.stringify({ type: 'count', data: count }))
}
function onclose () {
peers[this.id] = null
if (this.id === waitingId) {
waitingId = null
}
if (this.peerId) {
var peer = peers[this.peerId]
peer.peerId = null
peer.send(JSON.stringify({ type: 'end' }), onsend)
}
count -= 1
broadcast(JSON.stringify({ type: 'count', data: count }))
}
function onmessage (data) {
console.log('[' + this.id + ' receive] ' + data + 'n')
try {
var message = JSON.parse(data)
} catch (err) {
console.error('Discarding non-JSON message: ' + err)
return
}
if (message.type === 'peer') {
if (waitingId && waitingId !== this.id) {
var peer = peers[waitingId]
this.peerId = peer.id
peer.peerId = this.id
this.send(JSON.stringify({
type: 'peer',
data: {
initiator: true
}
}), onsend)
peer.send(JSON.stringify({
type: 'peer'
}), onsend)
waitingId = null
} else {
waitingId = this.id
}
} else if (message.type === 'signal') {
if (!this.peerId) return console.error('unexpected `signal` message')
var peer = peers[this.peerId]
peer.send(JSON.stringify({ type: 'signal', data: message.data }))
} else if (message.type === 'end') {
if (!this.peerId) return console.error('unexpected `end` message')
var peer = peers[this.peerId]
peer.peerId = null
this.peerId = null
peer.send(JSON.stringify({ type: 'end' }), onsend)
} else {
console.error('unknown message `type` ' + message.type)
}
}
function onsend (err) {
if (err) console.error(err.stack || err.message || err)
}
function broadcast (message) {
for (var id in peers) {
var peer = peers[id]
if (peer) {
peer.send(message)
}
}
}
httpServer.listen(PORT, function () {
console.log('Listening on port ' + PORT)
})

HTTPS需要一个与域名匹配的安全证书。用于生产的域名和证书都可以在线购买,并且有有效期,需要续订。

证书由cert.pemkey.pem两个文件组成。

对于本地开发,可以为localhost域生成自签名的不受信任的证书(通过openssl命令行工具)。

openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -subj '/CN=localhost'

原始代码可以从'http'更新为'https',这两个文件需要加载并作为选项传递给https.createServer()

我还必须更新对'node-static'的调用,因为它不提供本地文件。

var hat = require('hat')
var https = require('https') // updated
const fs = require('fs');
var nodeStatic = require('node-static')
var ws = require('ws')
var PORT = process.argv[2] || 4000
const options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};
var httpServer = https.createServer(options) // updated
var staticServer = new nodeStatic.Server('./public')
var wsServer = new ws.Server({ server: httpServer })
var peers = {}
var waitingId = null
var count = 0
httpServer.on('request', function (req, res) { // updated
staticServer.serve(req, res)
})
// the rest of the original code
// httpServer variable is now an HTTPS server instance

httpServer.listen(PORT, function () {
console.log('Listening on port ' + PORT)
})

启动服务器并访问https://localhost:4000将提示不受信任的证书警告,您必须承认。

  1. 注册一个网站域名,费用低于$15.00/年(适用于。com),包括whois保护。
  2. 创建一个免费的Cloudflare帐户并设置您的新域名,配置DNS来代理和处理您计划在该域名下托管的ip。
  3. 通过cloudflare生成SSL密钥,并在您的项目中使用证书。只要DNS路由说你的家庭IP或服务器IP,它就会维护HTTPS。

为了测试的目的,你可以使用假的密钥/证书,但这将始终显示不安全,直到你按照上面的步骤。

在NodeJS中使用HTTPS:

const HTTPS = require('https');
const FILESYSTEM = require('fs');
// CREATE HTTP APP HERE THEN CREATE HTTPS SERVER FOR THE APP
HTTPS.createServer({ key: FILESYSTEM.readFileSync(__dirname + '/certs/key.pem'), cert: FILESYSTEM.readFileSync(__dirname + '/certs/cert.pem') }, app).listen(443);

最新更新