如何使用Lets Encrypt,Node和Express 4设置HTTPS

时间:2017-03-25 02:27:50

标签: node.js ubuntu express https lets-encrypt

我做了什么

我使用certbot来证明我拥有自己的域名,该域名生成了多个.pem文件。证书列在此处:https://certbot.eff.org/docs/using.html#where-are-my-certificates

我发现this post有意义,并且与我从谷歌搜索中获得的所有其他信息相匹配,但当我这样做并运行节点时,我无法使用https连接到我的网站。 Http一直很好用。

我的服务器是express.js + node.js,我没有使用像nginx这样的反向代理。它在Google Cloud Platform上运行在Ubuntu上。

相关代码是:

var http = require('http');
var https = require('https');
var privateKey  = fs.readFileSync('/etc/letsencrypt/live/troywolters.com/privkey.pem', 'utf8');
var certificate = fs.readFileSync('/etc/letsencrypt/live/troywolters.com/fullchain.pem', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var app = express();

// Lots of other express stuff (app.use()'s)

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);
httpServer.listen(80);
httpsServer.listen(443);

什么不起作用

当我尝试使用https://troywolters.com连接到我的网站时,连接超时并且没有任何反应。我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题的答案是我的托管平台(Google Cloud Platform)在默认配置中不允许端口443通过防火墙。运行

gcloud compute firewall-rules create allow-https --description "Incoming https allowed." --allow tcp:443

允许通过端口443的传入流量并修复问题。

感谢服务器故障的迈克尔汉普顿提示。