使用 Certbot 添加 SSL 证书时如何指定 80 以外的端口?

使用 Certbot 添加 SSL 证书时如何指定 80 以外的端口?

我有一台运行 2 个不同 Web 服务器(Apache 和 Nginx)的服务器。Apache 服务器负责处理定向到 Wordpress 网站的所有流量,而 Nginx 服务器则为我的 Python API 和 React Web App 提供服务。

由于与 Apache 的端口冲突,我不得不将 API 设置为在端口 88 上运行,将 React 应用设置为在端口 90 上运行。我以这种方式进行了测试,并且成功了。所有请求都将转发到 443,所以我认为不安全的端口是什么并不重要。

当我最终运行命令来添加证书时:

sudo certbot --nginx -d a.domain.com

这给了我一个错误。经过进一步检查,我发现它试图在端口 80 而不是 88 上打开域。我做了一些研究,找到了规则--http-01-port并将其设置为 88,但它再次给了我同样的错误:

sudo certbot --nginx --http-01-port 88 -d a.domain.com

尝试了这么多次之后,我担心 certbot 可能会因为怀疑我是垃圾邮件而很快屏蔽我几个小时或几天,而我已经没有其他可行的解决方案了。

有人遇到过这个问题吗?你是怎么解决的?

答案1

无法指定除默认端口 (80/443) 以外的其他端口。

我建议您使用 acme-dns 验证。我用过,效果很好。更多详情请见此处:https://www.digitalocean.com/community/tutorials/how-to-acquire-a-let-s-encrypt-certificate-using-dns-validation-with-acme-dns-certbot-on-ubuntu-18-04

同样,acme-dns 对于为具有公共域的内部网颁发 Let's Encrypt 证书非常有用。

答案2

@tero-kilkanen 的建议让我想到使用端口 80 上的 default-catch all VHost 进行验证,并将其 webroot 提供给任何域的 certbot 命令:

certbot certonly --webroot -w /var/www -d www.example.com

当然,这只有在默认的 catch-all VHost 具有 webroot 时才有效。但如果没有,仍然可以使用重写规则执行重定位 (fe)(如果对等方不是 certbot),并路由到具有 webroot 的内部 VHost 以进行 certbot 验证请求(您可以通过查找路径.well-knownfe 来识别 - 请参阅https://eff-certbot.readthedocs.io/en/stable/using.html#webroot)。对于证书更新,您必须重写最终的 VHost 以定位到默认的 catch-all VHost。

如果目标域的 A 记录已经指向请求服务器的 IP 地址(这已经是一种 DNS 验证),那么完全绕过该验证就好了。仅仅为了创建/更新证书而停止/启动 Web 服务器(重新加载就足够了),这太过分了,难以接受。但也许我只是不明白他们这样做的可能好的理由。

答案3

certbot certonly --standalone -d myapp.domainexample.com --non-interactive --agree-tos --email[电子邮件保护]--http-01-端口=9090

相关内容