如何启用基于NodeJS(Express)的服务器的SSL连接

时间:2017-02-28 11:32:01

标签: node.js ssl

以下是我在NodeJS官方网站上找到的脚本:

// curl -k https://localhost:8000/
const https = require('https');
const fs = require('fs');

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

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

我对SSL事情完全不熟悉。我阅读了一些关于如何在Nodej上启用SSL的教程,但对该过程仍然没有信心。

我有一个域名(Godaddy),SSL(Namecheap)和云服务器(数字海洋,应用程序部署在HTTP前缀上)。

每当我打开网站的登录页面时,Google Chrome都会将其标记为“不安全”,因此我想在网站上添加SSL。

我需要在NodeJS服务器上做什么(Express)以及我需要在Namecheap上做些什么?这样做的顺序是什么?什么是生成.pem .csr文件的cmd行?

我没有找到并且全面的指导以简洁的方式制定所有步骤,所以只需简明地(如果可能的话)制定步骤,并指向进一步挖掘资源的链接。

另外,我如何使用express框架在上面的脚本中创建https服务器?

2 个答案:

答案 0 :(得分:0)

该脚本适用于为https设置证书。如果您的网站是公开的,那么您将需要从您的ssl服务中购买证书,在您的示例中为Namecheap。然后,您可以将它们移动到主机并在示例中的选项对象中引用它们。但是,您可以生成自己的ssl证书,这也可以。但是,任何用户都会收到警告,因为您自己签名/创建了他们,因此他们不受信任。我建议使用Namecheap选项。

注意:您的示例中只有一个https服务器,任何试图通过http访问您网站的人都会收到一个空白页面。您还需要通过以下方式创建一个http服务器:

var http = require('http');
http.createServer(...);

我建议让http服务器重定向到https网址。

答案 1 :(得分:0)

我的代码和错误在这里:

找不到这样的目录错误:

  key: fs.readFileSync('../private.key'),

  cert: fs.readFileSync('../public.cert')

错误,找不到这样的目录

  key: fs.readFileSync('./private.key'),

  cert: fs.readFileSync('./public.cert')

工作代码应为

key: fs.readFileSync(__dirname + '/private.key', 'utf8'),

cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')

完整的https代码为:

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

// readFileSync function must use __dirname get current directory
// require use ./ refer to current directory.

const options = {
   key: fs.readFileSync(__dirname + '/private.key', 'utf8'),
  cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')
};


 // Create HTTPs server.

 var server = https.createServer(options, app);

这是我 express 4.0 工作代码

express 4.0与3.0和其他版本有很大的不同。

4.0您有/ bin / www文件,将在此处添加https。

“ npm start”是启动Express 4.0服务器的标准方式。

readFileSync()函数应使用 __ dirname 获取当前目录

而require() 使用./ 则引用当前目录。

首先,将private.key和public.cert文件放在/ bin文件夹下, 与WWW文件相同的文件夹