我应该在哪里存储https服务器的密钥和证书(Node.js)

时间:2015-08-29 19:58:17

标签: node.js ssl

我对ssl很新,并且无法使用https设置我的节点项目。我已经注册并获得了StartSSL的免费证书。我的私钥在名为key.pem的文件中。我已经验证了我的域名,并将我的证书放在cert.pem文件中。

以下是我在HTTP上设置服务器的方法:

    var server = require('http').createServer(app);
    var port = process.env.PORT || 3000;
    server.listen(port, function () {
      console.log('Server listening at port %d', port);
    });

这很好用,我的所有页面都相应加载。 以下是我尝试设置https服务器的方法:

var https = require("https");
var fs = require("fs");
var key_file   = "key.pem";
var cert_file  = "cert.pem";
var passphrase = "...";
var config     = {
  key: fs.readFileSync(key_file),
  cert: fs.readFileSync(cert_file),
  passphrase: passphrase
};
var server = https.createServer(config,app).listen(443);

问题是localhost不会加载任何东西。我的控制台没有任何错误,这很烦人,因为我不知道我做错了什么。正如你所看到的那样,我只是将我的密钥和证书放在我项目的根目录中,我不确定我是否应该这样做。 我不应该只能访问localhost:443或https://localhost:443并查看我的网站?我现在试着按照6个教程进行操作,似乎无法正常工作。我甚至这样做了吗?因为我没有从客户那里得到任何我认为应该做的证明。

也试过这个也行不通:

var https = require("https");
var constants = require("constants");
var fs = require("fs");
 var passphrase = "...";
https.createServer({
    key: fs.readFileSync("key.pem"),
    cert: fs.readFileSync("cert.pem"),
    passphrase: passphrase,
    secureProtocol: 'SSLv23_method',
    honorCipherOrder: true,
    secureOptions: constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_SSLv2
}, function(req, res) {
    req.end("Hello, SSL World!");
}).listen(443, function() {
    console.log("SSL Proxy listening on port 443");
});

即使它说它在控制台中正在侦听443,也无法获得hello世界。

编辑: 这是我的整个index.js,我仍然无法得到你好的世界。所有依赖项都已安装。可能是什么问题?

var express = require('express');
var app = express();
var https = require("https");
var fs = require("fs");
var options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};
https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);

1 个答案:

答案 0 :(得分:0)

我已经尝试过您的代码,但它确实有效。 但是你需要改变

req.end("Hello, SSL World!");

res.end("Hello, SSL World!");

否则尝试遵循这个更简单的示例 documentation

确保以root用户身份启动服务器,因为您正在使用端口443