Certbot: 独立应该允许备用端口绑定到(但不验证到)

创建于 2016-03-22  ·  30评论  ·  资料来源: certbot/certbot

如果standalone插件允许用户指定绑定到哪个端口(例如 8080),那么它可以根据需要运行在 nginx/apache/ 或任何其他后面的certonly行为服务器通过 proxypass 指令。

所有挑战仍应通过端口 80(和 443,如果需要)。 这只会为拥有 root 权限的人提供一些关于他们如何路由流量的灵活性。

最有用的评论

_您必须让 ACME 服务器可公开访问 80 端口才能进行验证。_

_此解决方案仅适用于在内部备用端口上运行服务器,并从 PORT80 代理到备用端口。_

_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_

所有30条评论

我相信客户端已经拥有你想要的功能,但是,它并没有以非常用户友好的方式呈现,因为它主要用于测试。 客户端具有以下标志:

  --tls-sni-01-port TLS_SNI_01_PORT
                        Port number to perform tls-sni-01 challenge. Boulder
                        in testing mode defaults to 5001. (default: 443)
  --http-01-port HTTP01_PORT
                        Port used in the SimpleHttp challenge. (default: 80)

这些标志允许您指定客户端为哪些端口设置域验证质询。 一般来说, --tls-sni-01应该是您将传入端口 443 流量路由到的端口,而--http-01-port应该是您将传入端口 80 流量路由到的端口。

您不需要同时使用这两个标志,但是,默认情况下独立执行超过 443 的挑战。您可以使用以下标志控制此行为:

  --standalone-supported-challenges STANDALONE_SUPPORTED_CHALLENGES
                        Supported challenges. Preferred in the order they are
                        listed. (default: tls-sni-01,http-01)

我希望这有帮助!

谢谢,我明天试试这个。

如果这行得通,它真的应该被用作一个例子。 重新启动服务器以启用/禁用代理传递这些端口比让所有内容脱机处理验证过程要容易得多,

2016 年 3 月 22 日下午 3:16,bmw [email protected]写道:

我相信客户端已经拥有你想要的功能,但是,它并没有以非常用户友好的方式呈现,因为它主要用于测试。 客户端具有以下标志:

--tls-sni-01-port TLS_SNI_01_PORT
执行 tls-sni-01 质询的端口号。 博尔德
在测试模式下默认为 5001。(默认:443)
--http-01-port HTTP01_PORT
SimpleHttp 挑战中使用的端口。 (默认值:80)
这些标志允许您指定客户端为哪些端口设置域验证质询。 通常,--tls-sni-01 应该是您将传入端口 443 流量路由到的端口,而 --http-01-port 应该是您将传入端口 80 流量路由到的端口。

您不需要同时使用这两个标志,但是,默认情况下独立执行超过 443 的挑战。您可以使用以下标志控制此行为:

--standalone-supported-challenges STANDALONE_SUPPORTED_CHALLENGES
支持的挑战。 按顺序首选
列出。 (默认:tls-sni-01,http-01)
我希望这有帮助!


您收到此消息是因为您编写了该主题。
直接回复此邮件或在 GitHub 上查看

@jvanasco大多数人在该用例中使用 webroot 插件,但是是的,代理传递 nginx 示例可能很好。 随意制作一个 PR,在文档中添加一个; 这是一个足够专业的用例,它可能应该在该文件的底部获得一个新部分:

https://github.com/letsencrypt/letsencrypt/blob/master/docs/using.rst

但是,您可以从现有的 Standalone 部分链接到它:

https://github.com/letsencrypt/letsencrypt/blob/master/docs/using.rst#standalone

我们从未收到过关于此问题的回复,因此我将关闭此问题。 如果您希望我重新打开,请对我大喊大叫。

这似乎不起作用。 @宝马

/usr/local/bin/certbot-auto certonly --http-01-port 8484 --config-dir /etc/letsencrypt --work-dir /var/lib/letsencrypt --logs-dir /var/log/letsencrypt --standalone --standalone-supported-challenges http-01 --email [email protected] --domains example.com --agree-tos --non-interactive
tcp        0      0 0.0.0.0:8484                0.0.0.0:*                   LISTEN      7270/python2

我看到身份验证来自端口 80,但是 python2 服务器确实在 8484 上启动。

80 端口上的 Nginx

66.133.109.36 - - [25/Aug/2016:12:41:15 +0100] "GET /.well-known/acme-challenge/xxxxxxxx HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"

编辑:
我看到--tls-sni-01-port 5001 --http-01-port 5002都是必需的!

编辑:
我仍然不知道如何让独立服务器启动服务器并对其进行身份验证

还有--tls-sni-01-port被忽略的问题:

# certbot certonly --noninteractive --email "matt.hanley@****" --domain **** --agree-tos --tls-sni-01-port 40443 --http-01-port 4080 --standalone  
Failed authorization procedure. ****** (tls-sni-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Incorrect validation certificate for TLS-SNI-01 challenge. Requested 2af2853170e5be7e86cdff79d0ca****.febd4f14bb130b15910f30587cf4****.acme.invalid from 185.***.***.***:443. Received certificate containing '*****'

请注意,请求实际上去了:443 ; 我已经在:443上运行了一个 HTTPS 服务,提供不同的证书。 但是,这确实适用于renew

也有--tls-sni-01-port的问题:

certbot certonly -n -d example.com --agree-tos --email "[email protected]" --standalone --tls-sni-01-port 8443 --http-01-port 8080

Failed to connect to 1.2.3.4:443 for TLS-SNI-01

--http-01-port / --tls-sni-01-port不允许您指定 Let's Encrypt 将连接到您的服务器的端口。 它将始终分别使用 80/443。 所有这些标志都允许您控制 Certbot 侦听哪些端口以获取独立插件等插件。 例如,如果您将所有端口 80 流量路由到端口 8080,这将非常有用。

是的,请注意,您基本上必须在公共 IP 地址上访问端口 80。

文档中非常缺乏的东西,也意味着 Let's Encrypt 不适合无法控制 80 上的传入流量的少数群体(可能是中国/某些 ISP、公司防火墙)

我阅读了有关此的多个帖子,几乎似乎能够监听 80 被认为是一种安全增益/信任措施,因为它是 Nix 盒子上的特权端口。

虽然似乎让我们加密不承认网络服务器之外的证书的用途..例如电子邮件服务器等,但我可能只想在节点应用程序的端口 7722 上快速启动以处理身份验证,然后像我一样关闭' t运行网络服务器..但去图。

也意味着如果您使用像 Chef 这样的自动化,例如,您需要配置自签名证书才能启动您的 nginx,因为配置将具有 SSL,它必须至少具有有效证书。

如果您只运行 SSL,另一个选择是让不同的 Web 服务器服务 80,这样它可以确保在 nginx 尝试启动之前下载证书。 (烦人的设置)

我的厨师部署现在通过以下方式运行:

  1. 安装自签名证书。
  2. 引导 nginx(带有自我证书)
  3. 运行证书
  4. 符号链接证书到我的位置
  5. 重新加载 nginx

从我的iPhone发送

2016 年 9 月 15 日 23:18,Brad Warren [email protected]写道:

--http-01-port/--tls-sni-01-port 不允许您指定 Let's Encrypt 将连接到您的服务器的端口。 它将始终分别使用 80/443。 所有这些标志都允许您控制 Certbot 侦听哪些端口以获取独立插件等插件。 例如,如果您将所有端口 80 流量路由到端口 8080,这将非常有用。


您收到此消息是因为您发表了评论。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

我的 Web 服务器仅在一个端口上侦听 SSL 连接,它不是默认的 443。这是因为 Web 服务器位于允许端口转发的 VPN 服务后面,但不允许端口转发到端口 80 或 443。

我正在尝试在此服务器上配置 Let's Encrypt,但在日志中我可以看到 acme 客户端尝试连接端口 80(无法访问)并失败。

我得到的错误是“无法连接”状态 400。

“addressesResolved”值是正确的,只是“port”值是 80 并且所有 url 都不正确,因为它们应该指定我的自定义端口,例如 subdomain.domain。 tld:1234其中 1234 是我的自定义端口。

有没有办法让它与我的设置一起使用?

@gsdevme我得到的印象是我必须让端口 80 可以公开访问......

_您必须让 ACME 服务器可公开访问 80 端口才能进行验证。_

_此解决方案仅适用于在内部备用端口上运行服务器,并从 PORT80 代理到备用端口。_

_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_
_如果您无法访问 PORT80,则必须使用 DNS 验证。_

感谢@jvanasco 的回复。 太糟糕了,我无法指定自定义端口。 DNS 验证不是一个选项,因为我的动态 DNS 提供商http://freedns.afraid.org/没有自动更改 TXT 记录的界面。

@jvanasco虽然我知道您的回复完全正确,但如果我们在回答之前都冷静一下就好了:D

是否有任何时间估计何时可以配置? 因为我确信有很多人在自定义端口上运行 Web 服务器。

它不能通过设计选择进行配置

从我的iPhone发送

2017 年 2 月 14 日 16:16,nvaert1986 [email protected]写道:

是否有任何时间估计何时可以配置? 因为我确信有很多人在自定义端口上运行 Web 服务器。


你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

同样的问题在这里,但出于码头工人的目的。

问题 :
我不想将 certbot 命令与我的 webserver start 命令打包,因为它在非生产环境中总是会失败。
所以我想构建一个包含 certbot 的特定图像:

  • 索要证书
  • 将证书放入与我的网络服务器共享的卷中

但这个解决方案只有在我停止我的网络服务器容器时才有效,该容器已经绑定在端口 80 和 443 上。

解决方案 :
能够更改 certbot 端口。 这将允许 certbot 和 webserver 容器并行运行。

使用 DNS 验证可能会解决该用例。

从我的iPhone发送

2017 年 2 月 26 日 23:32,NilsRenaud [email protected]写道:

同样的问题在这里,但出于码头工人的目的。

问题 :
我不想将 certbot 命令与我的 webserver start 命令打包,因为它在非生产环境中总是会失败。
所以我想构建一个包含 certbot 的特定图像:

索要证书
将证书放入与我的网络服务器共享的卷中
但这个解决方案只有在我停止我的网络服务器容器时才有效,该容器已经绑定在端口 80 和 443 上。

解决方案 :
能够更改 certbot 端口。 这将允许 certbot 和 webserver 容器并行运行。


你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

可以,但是这种验证模式在独立模式下是不可能的:/
(来自:https://certbot.eff.org/docs/using.html#plugins)

似乎在不影响安全性的情况下,一个明智的中间立场是允许通过 DNS SRV 记录发现端口。 Letsencrypt 可以查询类似的记录

_letsencrypt._tcp IN SRV 0 0 8080 10.10.10.10

在域上并将验证请求转发到生成的地址/端口组合。 这与 DNS 验证具有相同的好处,但没有需要动态更新的缺点。

这也意味着用户可以通过引用中央证书服务器轻松地集中管理他们的证书。

允许替代端口如何损害安全性?

这个 FOSS 实用程序可以帮助您自动将 ACME 证书直接和间接安装到 TCP/443 端口繁忙或没有 TCP/443 端口转发给它们的主机:

https://www.actiu.net/sesele/

关于 SeSeLe 如何工作以允许使用的文档在哪里
不同于 443 的端口?

2017 年 10 月 26 日下午 1:21,“Narcis Garcia” [email protected]写道:

这个 FOSS 实用程序可以帮助您自动化直接和间接安装
ACME 证书发给 TCP/443 端口繁忙或没有 TCP/443 的主机
端口转发给他们:

https://www.actiu.net/sesele/


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看
https://github.com/certbot/certbot/issues/2697#issuecomment-339754606
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAOGhuxKLiYjM4-cME-0GBu9Ujoe0NB_ks5swM20gaJpZM4H1uae
.

请转到 SeSeLe 论坛的问题,以便更好地协调文档。 (答案现在写在 SeSeLe 文档中)

也许这个问题可以重新审视? 根本问题仍然没有解决方案。 是的,您可以将独立绑定到不同的端口,但这没用,因为 athority 仍将连接到 80/443。

如果您的服务器已经在生产中运行在 80/443 上,那么您有时根本无法释放这些端口。 手动放置挑战文件也可能有问题(在 Docker 中运行的服务器)。

这里真正的解决方案是指定一组更高的端口(10 000+),权威机构将尝试连接这些端口作为后备或类似的东西。 也许有安全隐患,不是专家。

LE 仅连接到端口 80/443 的动机是什么? 这是一个
正式记录的限制?

谁能指出我正确的文件?

2017 年 11 月 30 日上午 6:31,“cen1” [email protected]写道:

也许这个问题可以重新审视? 仍然没有解决方案
根本问题。 是的,您可以将独立绑定到不同的端口,但是
没用,因为 athority 仍将连接到 80/443。

如果您的服务器已经在 80/443 上运行,也许在生产中,您
有时根本无法释放这些端口。 手动放置
挑战文件也可能有问题(在 Docker 中运行的服务器)。

这里真正的解决方案是指定一组更高的端口(10
000+),权威机构会尝试连接作为后备或其他东西
像那样。 也许有安全隐患,不是专家。


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看
https://github.com/certbot/certbot/issues/2697#issuecomment-348162321
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAOGHqWG9XZyTVDdAbm3t5xQ-AD6Y_OQks5s7pIDgaJpZM4H1uae
.

LE 仅连接到端口 80/443 的动机是什么?
这是正式记录的限制吗?

谁能指出我正确的文件?

这是此处描述的当前 CA/B 论坛要求:
https://cabforum.org/2017/09/19/ballot-190-revised-validation-requirements/

并在这里更详细地解释: https ://community.letsencrypt.org/t/support-for-ports-other-than-80-and-443/3419/100

据我所知,我的英语很差,在 CA/浏览器论坛上,他们在 2017 年 9 月就可能添加 TCP 端口 25、115、22 进行了辩论。
该提案似乎已获批准,并应于今年 11 月生效。

如果有人从谷歌(比如我)来到这里,来自未来的注释:

2018-08-29 13:43:33,495: WARNING:certbot.plugins.standalone: 
The standalone specific supported challenges flag is deprecated. 
Please use the --preferred-challenges flag instead.

如果您使用的是 nginx,则可以将 nginx 模块与certbot certonly --nginx一起使用,它无需任何配置即可接入现有的 nginx 服务器。

标志--http-01-port不是很直观,我在命令的帮助下也找不到它,不得不在谷歌上搜索标志--http-01-port 。 很高兴在帮助中提到该标志。

此页面是否有帮助?
0 / 5 - 0 等级