最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

带有快速和端口转发功能的greenlock(let'encrypt)

运维笔记admin11浏览0评论

带有快速和端口转发功能的greenlock(let'encrypt)

带有快速和端口转发功能的greenlock(let'encrypt)

我正在尝试设置letencrypt(显然现在是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: "",
        email: "[email protected]", // 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

让我们的加密是其免费SSL服务的EFF的商标名称。

[格林洛克是我为我的JavaScript客户端提供服务的品牌。

[当他们开始为Let's Encrypt申请商标时,我更改了名称。

视频教程

如果您遵循Greenlock快速入门,则不会失败。 :)

  • Free SSL with Greenlock (Let's Encrypt v2 for Node.js) - Part 1 (QuickStart)

也是老歌,但好吃的东西:

  • The 15-Minute Guide to Secure VPS Access (for the Paranoid)

保持愚蠢-简单

  • VPS
  • netcap
  • 系统

在具有持久性的磁盘的普通VPS(例如Digital OceanLinodeVultrScaleway)上,请使用“ netcap”。这将允许非root用户绑定到特权端口:

sudo setcap 'cap_net_bind_service=+ep' $(which node)

TADA!现在您可以以普通用户身份运行node ./server.js --port 80

Aside

您还可以使用systemd停止和启动服务。由于systemd有时是一个p.i.t.a.,我写了一个wrapper script in Go,它使部署节点项目非常容易:

# Install
curl https://rootprojects/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

我回答了您提到的问题:https://stackoverflow/a/58388665/151312

它可能会从AWS顽固派那里得到很多支持...但是:

请勿使用AWS。使用VPS。

我真的很喜欢数字海洋Vultr

而且,这两个都有Greenlock DNS-01插件。这将使您的生活变得真正轻松。

HTTP-01与DNS-01验证

Greenlock的默认验证MUST通过端口80上的HTTP进行。这是规范的一部分。它们CANNOT通过HTTPS或任何其他端口。

但是,如果专用网络需要SSL / TLS(这可能不是您的问题),则可以使用DNS-01插件。如上所述,与Digital Ocean,Vultr和许多其他产品集成非常简单:

  • acme-dns-01-digitalocean
  • acme-dns-01-vultr

大约有十二种不同的插件。除了通配符域和专用网络外,您没有必须使用它们,但是如果您认为在同一位置管理DNS和VPS对您有好处,我强烈建议您使用DNS -01代替HTTP-01。

端口转发是不可行的

除非您是专家并且不知道自己在做什么和为什么,否则不要转发。您将会遇到困难,并且事情将无法按预期进行。

您如何成为专家...有很多方式(而且不是[[hard)...但是据我所知,它实际上并不能帮助您实现最近期的目标。] >抱歉,我不能提供更多帮助,但这是一个很大的话题。

发布评论

评论列表(0)

  1. 暂无评论