Node.js HTTPS 安全错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5136353/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 13:53:45  来源:igfitidea点击:

Node.js HTTPS Secure Error

httpsnode.jssocket.io

提问by Kit

I am trying to create a secure node.js server to use with my site that is using ssl (https).

我正在尝试创建一个安全的 node.js 服务器,以便与我使用 ssl (https) 的站点一起使用。

const crypto = require('crypto'),
      fs = require("fs"),
      http = require("http");

var privateKey = fs.readFileSync('/home/privatekey.pem');
var certificate = fs.readFileSync('/home/certificate.pem');

var credentials = crypto.createCredentials({key: privateKey.toString(), cert: certificate.toString()});

var handler = function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
};

var server = http.createServer();
server.setSecure(credentials);
server.addListener("request", handler);
server.listen(8084);

But when I start my server, I get the following error:

但是当我启动服务器时,出现以下错误:

node.js:116
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
TypeError: Object #<Server> has no method 'setSecure'
    at Object.<anonymous> (/home/meshdev/public_html/js/node/server/test.js:16:8)
    at Module._compile (module.js:380:26)
    at Object..js (module.js:386:10)
    at Module.load (module.js:312:31)
    at Function._load (module.js:273:12)
    at Array.<anonymous> (module.js:399:10)
    at EventEmitter._tickCallback (node.js:108:26)

My server works great without the server.setSecure(credentials);line. I am running node.js(V0.4.1).

我的服务器在没有server.setSecure(credentials);线路的情况下运行良好。我正在运行 node.js(V0.4.1)。

I would appreciate any suggestions.

我将不胜感激任何建议。

Thank you.

谢谢你。

回答by schaermu

HTTPS implementation was re-done in Node.JS 0.4. See the corresponding docs at nodejs.org.

HTTPS 实现在 Node.JS 0.4 中重新完成。请参阅nodejs.org 上的相应文档。

Example from the docs:

文档中的示例:

var tls = require('tls');
var fs = require('fs');

var options = {
  key: fs.readFileSync('server-key.pem'),
  cert: fs.readFileSync('server-cert.pem')
};

tls.createServer(options, function (s) {
  s.write("welcome!\n");
  s.pipe(s);
}).listen(8000);

回答by moeiscool

this setup allowed me to connect to my socket.io server ssl (HTTPS/WSS)

此设置允许我连接到我的 socket.io 服务器 ssl (HTTPS/WSS)

http=require('https'),io=require('socket.io'),fs=require('fs');

var privateKey = fs.readFileSync('ssl/nginx.key');
var certificate = fs.readFileSync('ssl/nginx.crt');
var options = {key: privateKey,cert: certificate};
var server = http.createServer(options);
server.listen(3000);
io = io.listen(server);

回答by Abhishek Kashyap

I have worked on the https secure with the ssl here is the working code for making the https and http

我已经使用 ssl 处理了 https 安全,这里是制作 https 和 http 的工作代码

var fs = require('fs');
var http = require('http');
var https = require('https');
var debug = require('debug')('expressapp');
var app = require('../app');
var CONSTANTS = require('../config/CONSTANTS.js');
var AWS = require('aws-sdk');
var certificate =fs.readFileSync('ssl/server.crt',{encoding:'utf8'},function(err, data ) {
  console.log( data );});
var privateKey  = fs.readFileSync('ssl/server.key',{encoding:'utf8'},function(err, data ) {
  console.log( data );});


var credentials = {
  key: privateKey,
  cert: certificate,
  rejectUnauthorized:false
};

// UNCOMMENT THIS LINE AFTER INSTALLING CA CERTIFICATE
 //credentials.ca = fs.readFileSync('ssl/server.crt', 'utf8');;

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

  httpServer.listen(CONSTANTS.PORT.HTTP, function() {
    console.log('HTTP server listening on port ' + CONSTANTS.PORT.HTTP);
   })  ;

httpsServer.listen(CONSTANTS.PORT.HTTPS, function() {
  console.log('HTTPS server listening on port ' + CONSTANTS.PORT.HTTPS);
});