【问题标题】:Let's encrypt SSL certificate on subdomain让我们在子域上加密 SSL 证书
【发布时间】:2018-10-26 11:21:22
【问题描述】:

我为我在子域上托管的客户端开发了一个应用程序,现在问题是我不拥有主域/网站。他们添加了一个 DNS 记录来指向我托管该应用程序的 IP。现在我想从 Let's Encrypt 申请免费和自动证书。但是当我尝试握手时,它说

Getting challenge for subdomain.example.com from acme-server...
Error: http://subdomain.example.com/.well-known/acme-challenge/letsencrypt_**** is not reachable. Aborting the script.
dig output for subdomain.example.com:subdomain.example.com
Please make sure /.well-known alias is setup in WWW server.

这是有道理的,因为我在我的服务器上不拥有该域。但是,如果我尝试在没有主域的情况下生成它:

You must include your main domain: example.com.

Cannot Execute Your Request

Details

Must include your domain example.com in the LetsEncrypt entries.

所以我很好奇如何在不拥有主域的情况下设置证书。我尝试用谷歌搜索该问题,但找不到任何相关结果。任何帮助将不胜感激。

【问题讨论】:

  • **** 令人困惑。请编辑您的问题,并假装主域是 example.com。这应该没问题,因为 IETF 拥有 example.com,它只是用于测试。

标签: ssl subdomain lets-encrypt


【解决方案1】:

首先

您不需要拥有该域,您只需能够将文件复制到为该域提供服务的位置。 (听起来你都准备好了)

第二

你用的是什么工具?您提供的错误消息让我认为客户端配置错误。挑战名称通常类似于https://example.com/.well-known/acme-challenge/jQqx6qlM8u3wpi88N6lwvFd7SA07oK468mB1x4YIk1g。将其与您的错误进行比较:

    Error: http://example.com/.well-known/acme-challenge/letsencrypt_example.com is not reachable. Aborting the script.

第三

我是Greenlock 的作者,它与 Let's Encrypt 兼容。我相信它会为你工作。

安装

# Feel free to read the source first
curl -fsS https://get.greenlock.app/ | bash

与现有网络服务器一起使用

让我们这么说:

  • 您使用的是 Apache 或 Nginx。
  • 您确认ping example.com 提供了您服务器的IP
  • 您在端口 80 上公开 http(否则验证将失败)
  • 您的网站位于/srv/www/example.com
  • 您的电子邮件是jon@example.com(必须是真实的电子邮件地址)
  • 您希望将证书存储为/etc/acme/live/example.com/fullchain.pem

这是命令的样子:

sudo greenlock certonly --webroot \
  --acme-version draft-11 --acme-url https://acme-v02.api.letsencrypt.org/directory \
  --agree-tos --email jon@example.com --domains example.com \
  --community-member \
  --root /srv/www/example.com \
  --config-dir /etc/acme

如果这在第一次尝试时不起作用,则在调试时将--acme-url https://acme-v02.api.letsencrypt.org/directory 更改为--acme-url https://acme-staging-v02.api.letsencrypt.org/directory。否则,您的服务器可能会因为太多错误请求而被 Let's Encrypt 阻止。只需知道您必须从暂存环境中删除证书并使用生产 url 重试,因为该工具无法判断哪些证书是“生产”,哪些是“测试”。

--community-member 标志是可选的,但会为我提供分析,并允许我就重要或强制性更改以及其他相关更新与您联系。

收到成功消息后,您可以在网络服务器配置中使用这些证书并重新启动它。

这也可以作为一项 cron 工作。您可以每天运行它,它只会在大约 75 天后更新证书。您还可以放置一个 cron 作业,每隔几天将“更新配置”信号发送到您的网络服务器(通常是 HUP 或 USR1),以使其开始使用新证书而无需重新启动(...或只是重新启动)。

无需网络服务器即可使用

如果您只是想在没有运行网络服务器的情况下进行快速测试,这将为您解决:

sudo greenlock certonly --standalone \
  --acme-version draft-11 --acme-url https://acme-v02.api.letsencrypt.org/directory \
  --agree-tos --email jon@example.com --domains example.com \
  --community-member \
  --config-dir /etc/acme/

预计您没有在端口 80 上运行网络服务器,因为它会临时启动一个仅用于证书目的的网络服务器。

sudo 是使用端口 80 和写入根目录和 httpd 拥有的目录(如 /etc 和 /srv/www)所必需的。如果具有正确的权限,您可以以您的网络服务器的用户身份运行该命令。

使用 Greenlock 作为您的网络服务器

我们正在研究一种完全绕过中间人的选项,只需使用 greenlock 作为您的网络服务器,这对于简单的虚拟主机来说可能非常有用,就像您正在做的那样。如果您对此感兴趣,请告诉我,我会确保为您提供最新信息。

第四

Let's Encrypt 还有一个名为 certbot 的官方客户端,它可能也能正常工作,也许更好,但在早期,我自己构建比使用他们的更容易,因为他们早就存在问题固定。

【讨论】:

  • 我需要它用于子域而不是主域。这不会有问题,因为握手也会被重定向到我的服务器。
  • 域、子域 - DNS 无法区分。子域是一个政治问题,而不是技术堆栈的一部分(因此 .co、.co.uk 和其他复杂的 TLD 和 dyndns 站点)。就 DNS 而言,它只是一个带有“标签分隔符”的“标签”)。只要确保您使用的是子域而不是域,它就可以正常工作。
【解决方案2】:

重要的是子域A记录。它应该是您尝试请求子域证书的 IP 地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2020-07-20
    • 1970-01-01
    • 2018-11-24
    • 2016-05-04
    • 1970-01-01
    相关资源
    最近更新 更多