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

我对ssl非常陌生,并且无法使用https设置我的节点项目。 我已经注册并获得了StartSSL的免费证书。 我有一个名为key.pem的文件我的私钥。 我已经validation了我的域名,并在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); 

我试过你的代码,它的工作原理。 但是你需要改变

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

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

否则,请尝试遵循这个更简单的示例https://nodejs.org/api/https.html#https_https_createserver_options_requestlistener

请确保以root身份启动服务器,因为您使用的是端口443