【问题标题】:How to set up HTTPS using Lets Encrypt, Node, and Express 4如何使用 Lets Encrypt、Node 和 Express 4 设置 HTTPS
【发布时间】:2017-08-18 02:54:23
【问题描述】:

我做了什么

我使用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 连接到我的站点时,连接超时并且没有任何反应。我做错了什么?

【问题讨论】:

  • 当您远程访问您的服务器时,您能否向 443 端口发出本地请求,以确保您的 node.js 应用程序正确处理请求?如果是这样,那么您很可能有一个 iptable 问题/端口被阻止。如果没有,则说明您的应用有问题。
  • @Darkrum 抱歉,我该怎么做?我试着查看ping,但它似乎不做https,只有ECHO,当我做curl --request https://troywolters.com时curl就挂了。当我做curl --request https://127.0.0.1 虽然它说: curl: (51) SSL: certificate subject name (troywolters.com) does not match target host name '127.0.0.1' 所以也许这是一个好兆头?

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


【解决方案1】:

问题的答案是我的托管平台(谷歌云平台)在默认配置中不允许端口 443 通过防火墙。跑步

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

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

感谢 Server Fault 的 Michael Hampton 提供的提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 2018-08-08
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多