【问题标题】:Server HTTPS on node.js doesn't worknode.js 上的服务器 HTTPS 不起作用
【发布时间】:2014-07-02 14:58:57
【问题描述】:

我正在尝试创建一个 HTTPS 服务器。我按照以下说明使用 Cygwin64 生成了 privatekey.pem 和 certicate.pem:

openssl genrsa -out privatekey.pem 1024
openssl req -new -key privatekey.pem -out certrequest.csr
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem

而我的服务器代码是这样的:

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

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

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

当我尝试连接到地址https://localhost:8001 时,网页不可用。谁能帮帮我?

【问题讨论】:

  • 您可以尝试异步检索 pem 文件的内容吗?
  • 如果你添加一个listening 处理程序,它会执行吗?:.listen(8001, function() { console.log('listening on port 8001!'); })

标签: node.js ssl https


【解决方案1】:

您的代码绝对可以正常工作。我已经在我的本地主机中对其进行了测试。我认为问题在于您的密钥生成。尝试再次生成密钥并运行您的服务器。我希望它会起作用。

注意:您生成的证书只能在 localhost 中使用。所以不要在任何在线 IDE(如 codio.com、koding.com、cloud9.com 等)中尝试此操作。如果你想这样做,你必须从像 Verysign 这样的公司购买 SSL 证书。

如果不试试下面的代码。

第 1 步: 打开终端并运行以下命令生成私钥文件 'key.pem'

$ openssl genrsa 1024 > key.pem

第 2 步: 现在运行以下命令生成 SSL 证书文件 'key-cert.pem'

$ openssl req -x509 -new -key key.pem > key-cert.pem

第 3 步:现在编写具有以下内容的 'server.js' 文件。

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

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

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

第 4 步:现在使用以下命令运行服务器文件。

$ node server.js

第 5 步:现在在浏览器中点击 url 'https://localhost:8001' 并接受证书,您将在页面上看到“hello world”消息。

【讨论】:

  • 现在可以用单个命令生成认证文件openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
猜你喜欢
  • 2013-04-18
  • 2016-01-14
  • 2017-04-29
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 2019-12-23
相关资源
最近更新 更多