带有快速和端口转发的 greenlock (lets'encrypt)
greenlock (lets'encrypt) with express and port forwarding
我正在尝试设置 letsencrypt(现在显然是 greenlock)以使用 express 进行端口转发。
我有 this first issue 我解决了:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 3443
问题是,现在,我得到:
Fetching certificate for 'xxx' to use as default for HTTPS server...
[acme-v2] handled(?) rejection as errback:
Error: connect ECONNREFUSED 127.0.1.1:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14)
Error loading/registering certificate for 'xxx':
Error: connect ECONNREFUSED 127.0.1.1:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.1.1',
port: 80
}
我的应用现在就是这样:
require("greenlock-express")
.create({
server: "https://acme-staging-v02.api.letsencrypt.org/directory",
email: "xxx@gmail.com", // The email address of the ACME user / hosting provider
agreeTos: true, // You must accept the ToS as the host which handles the certs
configDir: "~/.config/acme/", // Writable directory where certs will be saved
communityMember: true, // Join the community to get notified of important updates
telemetry: true, // Contribute telemetry data to the projec
store: require('greenlock-store-fs'),
approveDomains: ['xxx.xxx.xxx'],
// Using your express app:
// simply export it as-is, then include it here
app: require("../app.js")
//, debug: true
})
.listen(3000, 3443);
显然我不能将端口 80 和 443 与 nodeJS 一起使用,但我也不能将任何其他端口与 greenlock 一起使用...解决方法是什么?
我是 Greenlock 的作者。
让我们加密 vs Greenlock
Let's Encrypt 是 EFF 的免费 SSL 服务品牌名称。
Greenlock 是我的 JavaScript 客户使用的品牌名称。
当他们开始为 Let's Encrypt 申请商标时,我更改了名称。
视频图茨
如果您遵循 Greenlock QuickStart,您就不会失败。 :)
另外,老歌,但是好歌:
保持愚蠢-简单
- VPS
- netcap
- systemd
在正常的VPS(如Digital Ocean、Linode、Vultr,或者Scaleway),磁盘是持久化的,使用"netcap"。这将允许非根用户绑定到特权端口:
sudo setcap 'cap_net_bind_service=+ep' $(which node)
多田!现在您可以 运行 node ./server.js --port 80
作为普通用户了!
旁白:
您还可以使用 systemd
来停止和启动您的服务。由于 systemd
有时是 p.i.t.a.,我写了一个 wrapper script in Go 使得部署节点项目变得非常容易:
# Install
curl https://rootprojects.org/serviceman/dist/linux/amd64/serviceman -o serviceman
chmod +x ./serviceman
sudo serviceman /usr/local/bin
# Use
cd ./my/node/project
sudo serviceman --username $(whoami) --cap-net-bind add npm start
或者,如果你的服务器没有被称为 'server.js'(事实上的标准),或者额外的选项:
cd ./my/node/project
sudo serviceman --username $(whoami) --cap-net-bind add node ./my-server-thing.js -- --my-options
所做的就是使用合理的默认值为您创建 systemd
文件。我建议您也查看 systemd
文档,但它有点难以理解,而且可能有更多令人困惑和糟糕的教程,而不是简单而好的教程。
除非您是专家,否则不要使用 AWS/EC2
我回复了你提到的那个问题:
它可能会得到 AWS 顽固分子的大量反对票...但是:
不使用 AWS。使用 VPS.
我很喜欢Digital Ocean和Vultr。
另外,这两个都有 Greenlock DNS-01 插件。这会让你的生活真正轻松。
HTTP-01 与 DNS-01 验证
Greenlock 的默认验证必须 通过端口 80 上的 HTTP。这是规范的一部分。他们不能通过 HTTPS 或任何其他端口。
但是,如果您需要 SSL/TLS 用于私有网络(这可能不是您的问题),您可以使用 DNS-01 插件。如上所述,与 Digital Ocean、Vultr 和许多其他软件集成非常简单:
大约有十几种不同的插件。除了 通配符域 和专用网络之外,您 没有 使用它们,但是如果您想要管理 DNS 和您的 VPS在同一个地方对你有好处,我强烈建议使用 DNS-01 而不是 HTTP-01。
端口转发是行不通的
除非您是专家并且知道自己在做什么以及为什么这样做,否则不要进行端口转发。你会遇到困难,事情不会如你所愿。
如何成为专家...有很多方法(并不难)...但是,据我了解,它不会真的帮助您实现最直接的目标。
抱歉,我没有比这更有帮助的了,但这是一个很大的话题。
我正在尝试设置 letsencrypt(现在显然是 greenlock)以使用 express 进行端口转发。
我有 this first issue 我解决了:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 3443
问题是,现在,我得到:
Fetching certificate for 'xxx' to use as default for HTTPS server...
[acme-v2] handled(?) rejection as errback:
Error: connect ECONNREFUSED 127.0.1.1:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14)
Error loading/registering certificate for 'xxx':
Error: connect ECONNREFUSED 127.0.1.1:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.1.1',
port: 80
}
我的应用现在就是这样:
require("greenlock-express")
.create({
server: "https://acme-staging-v02.api.letsencrypt.org/directory",
email: "xxx@gmail.com", // The email address of the ACME user / hosting provider
agreeTos: true, // You must accept the ToS as the host which handles the certs
configDir: "~/.config/acme/", // Writable directory where certs will be saved
communityMember: true, // Join the community to get notified of important updates
telemetry: true, // Contribute telemetry data to the projec
store: require('greenlock-store-fs'),
approveDomains: ['xxx.xxx.xxx'],
// Using your express app:
// simply export it as-is, then include it here
app: require("../app.js")
//, debug: true
})
.listen(3000, 3443);
显然我不能将端口 80 和 443 与 nodeJS 一起使用,但我也不能将任何其他端口与 greenlock 一起使用...解决方法是什么?
我是 Greenlock 的作者。
让我们加密 vs Greenlock
Let's Encrypt 是 EFF 的免费 SSL 服务品牌名称。
Greenlock 是我的 JavaScript 客户使用的品牌名称。
当他们开始为 Let's Encrypt 申请商标时,我更改了名称。
视频图茨
如果您遵循 Greenlock QuickStart,您就不会失败。 :)
另外,老歌,但是好歌:
保持愚蠢-简单
- VPS
- netcap
- systemd
在正常的VPS(如Digital Ocean、Linode、Vultr,或者Scaleway),磁盘是持久化的,使用"netcap"。这将允许非根用户绑定到特权端口:
sudo setcap 'cap_net_bind_service=+ep' $(which node)
多田!现在您可以 运行 node ./server.js --port 80
作为普通用户了!
旁白:
您还可以使用 systemd
来停止和启动您的服务。由于 systemd
有时是 p.i.t.a.,我写了一个 wrapper script in Go 使得部署节点项目变得非常容易:
# Install
curl https://rootprojects.org/serviceman/dist/linux/amd64/serviceman -o serviceman
chmod +x ./serviceman
sudo serviceman /usr/local/bin
# Use
cd ./my/node/project
sudo serviceman --username $(whoami) --cap-net-bind add npm start
或者,如果你的服务器没有被称为 'server.js'(事实上的标准),或者额外的选项:
cd ./my/node/project
sudo serviceman --username $(whoami) --cap-net-bind add node ./my-server-thing.js -- --my-options
所做的就是使用合理的默认值为您创建 systemd
文件。我建议您也查看 systemd
文档,但它有点难以理解,而且可能有更多令人困惑和糟糕的教程,而不是简单而好的教程。
除非您是专家,否则不要使用 AWS/EC2
我回复了你提到的那个问题:
它可能会得到 AWS 顽固分子的大量反对票...但是:
不使用 AWS。使用 VPS.
我很喜欢Digital Ocean和Vultr。
另外,这两个都有 Greenlock DNS-01 插件。这会让你的生活真正轻松。
HTTP-01 与 DNS-01 验证
Greenlock 的默认验证必须 通过端口 80 上的 HTTP。这是规范的一部分。他们不能通过 HTTPS 或任何其他端口。
但是,如果您需要 SSL/TLS 用于私有网络(这可能不是您的问题),您可以使用 DNS-01 插件。如上所述,与 Digital Ocean、Vultr 和许多其他软件集成非常简单:
大约有十几种不同的插件。除了 通配符域 和专用网络之外,您 没有 使用它们,但是如果您想要管理 DNS 和您的 VPS在同一个地方对你有好处,我强烈建议使用 DNS-01 而不是 HTTP-01。
端口转发是行不通的
除非您是专家并且知道自己在做什么以及为什么这样做,否则不要进行端口转发。你会遇到困难,事情不会如你所愿。
如何成为专家...有很多方法(并不难)...但是,据我了解,它不会真的帮助您实现最直接的目标。
抱歉,我没有比这更有帮助的了,但这是一个很大的话题。