如何在Node.js中创建HTTPS服务器?

2020/09/30 07:01 · javascript ·  · 0评论

给定一个SSL密钥和证书,如何创建HTTPS服务?

我发现以下示例。

https://web.archive.org/web/20120203022122/http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/


这适用于节点v0.1.94-v0.3.1。
server.setSecure()在较新版本的节点中被删除。

直接从该来源:

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

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

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

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(8000);

快递API文档相当明确阐述了这一点。

此外,此答案还提供了创建自签名证书的步骤。

我已经从Node.js HTTPS文档中添加了一些注释和摘要

var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');

// This line is from the Node.js HTTPS documentation.
var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.cert')
};

// Create a service (the app object is just a callback).
var app = express();

// Create an HTTP service.
http.createServer(app).listen(80);
// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(443);

谷歌搜索“ node https”时发现了这个问题,但是接受的答案中的例子很旧-取自当前(v0.10)版本docs,看起来应该像这样:

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

var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);

上面的答案很好,但是使用Express和node可以正常工作。

由于express为您创建了应用程序,因此我将在此处跳过。

var express = require('express')
  , fs = require('fs')
  , routes = require('./routes');

var privateKey = fs.readFileSync('cert/key.pem').toString();
var certificate = fs.readFileSync('cert/certificate.pem').toString();  

// To enable HTTPS
var app = module.exports = express.createServer({key: privateKey, cert: certificate});

Node.js中HTTPS服务器的最小设置如下所示:

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

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

https.createServer(httpsOptions, app).listen(4433);

如果您还想支持http请求,则只需进行以下小的修改即可:

var http = require('http');
var https = require('https');
var fs = require('fs');

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);

更新资料

通过Greenlock.js使用“让我们加密”

原始帖子

我注意到,这些答案都没有表明在链中添加了中间根CA,下面是一些零配置示例,您可以使用这些示例来查看:

片段:

var options = {
  // this is the private key only
  key: fs.readFileSync(path.join('certs', 'my-server.key.pem'))

// this must be the fullchain (cert + intermediates)
, cert: fs.readFileSync(path.join('certs', 'my-server.crt.pem'))

// this stuff is generally only for peer certificates
//, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]
//, requestCert: false
};

var server = https.createServer(options);
var app = require('./my-express-or-connect-app').create(server);
server.on('request', app);
server.listen(443, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

var insecureServer = http.createServer();
server.listen(80, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

如果您尝试直接通过connect或express进行操作,但是让本机https模块处理它,然后使用它为您提供连接/ Express应用程序服务,这通常会更轻松一些

另外,如果您server.on('request', app)在创建服务器时使用了传递应用程序的方式,而不是通过应用程序,则可以将server实例传递给创建连接器/快速应用程序的一些初始化函数(如果要通过同一服务器上的ssl进行websocket,例)。

为了使您的应用程序监听双方httphttps有关港口80443分别,做到以下几点

创建一个快速应用程序:

var express = require('express');
var app = express();

返回的应用express()是JavaScript函数。可以将其作为处理请求的回调传递给Node的HTTP服务器。这使得使用相同的代码库轻松提供应用程序的HTTP和HTTPS版本。

您可以按照以下方式进行操作:

var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');
var app = express();

var options = {
  key: fs.readFileSync('/path/to/key.pem'),
  cert: fs.readFileSync('/path/to/cert.pem')
};

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

有关完整的详细信息,请参阅文档

您还可以将其与Fastify框架一起存档:

const { readFileSync } = require('fs')
const Fastify = require('fastify')

const fastify = Fastify({
  https: {
    key: readFileSync('./test/asset/server.key'),
    cert: readFileSync('./test/asset/server.cert')
  },
  logger: { level: 'debug' }
})

fastify.listen(8080)

openssl req -nodes -new -x509 -keyout server.key -out server.cert如果需要编写测试,请运行以创建文件)

  1. 从此处下载用于openssl设置的rar文件:https : //indy.fulgan.com/SSL/openssl-0.9.8r-i386-win32-rev2.zip
  2. 只需将您的文件夹复制到c驱动器中即可。
  3. 创建openssl.cnf文件并从以下位置下载其内容:http:
    //web.mit.edu/crypto/openssl.cnf openssl.cnf可以放在任何地方,但在命令提示符下输入正确的路径时,路径应该正确。
  4. 打开命令propmt并设置openssl.cnf路径C:\ set OPENSSL_CONF = d:/openssl.cnf 5.在cmd中运行此命令:C:\ openssl-0.9.8r-i386-win32-rev2> openssl.exe
  5. 然后运行OpenSSL> genrsa -des3 -out server.enc.key 1024
  6. 然后它将要求输入密码:输入4至11个字符作为您的证书密码
  7. 然后运行此Openssl> req -new -key server.enc.key -out server.csr
  8. 然后它将询问一些详细信息,例如国家/地区代码州名称等,然后自由填写。10。然后运行Openssl> rsa -in server.enc.key -out server.key
  9. 运行此OpenSSL> x509 -req -days 365 -in server.csr -signkey server.key -out server.crt,然后使用堆栈溢出的先前代码,谢谢
本文地址:http://javascript.askforanswer.com/ruhezainode-jszhongchuangjianhttpsfuwuqi.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!