让我们在子域上加密SSL证书

时间:2018-05-16 11:55:38

标签: ssl subdomain lets-encrypt

我开发了一个客户端的应用程序,我在子域上托管,现在的问题是我不拥有主域名/网站。他们添加了一条DNS记录,指向我托管该应用的IP。现在我想要一个Free&来自加密的自动证书。但当我尝试握手时,它说

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.

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

2 个答案:

答案 0 :(得分: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的作者,它与我们的加密功能兼容。我相信它会对你有用。

安装

# 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。否则,您的服务器可能会因为太多错误请求而无法加密。只知道您必须从登台环境中删除证书并使用生产URL重试,因为该工具无法分辨哪些证书是"生产"哪些是"测试"。

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

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

这也可以作为一个cron工作。您可以每天运行它,它只会在大约75天后续订证书。你也可以把一个cron作业发送给#34;更新配置"每隔几天向您的网络服务器(通常是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上运行的网络服务器,因为它只是为了证书的目的暂时启动一个。

使用端口80以及写入root和httpd拥有的目录(如/ etc和/ srv / www)需要

sudo。如果具有正确的权限,您可以将该命令作为您的网络服务器用户运行。

将Greenlock 用作您的网络服务器

我们正在制定一个完全绕过中间人的选项,只需使用greenlock作为您的网络服务器,这可能非常适合简单的虚拟环境,就像听起来像你一样。如果您感兴趣,请告诉我们,我们一定会向您提供相关信息。

我们的加密还有一个名为certbot的官方客户端,它可能也可以正常工作,也许更好,但在早期我更容易建立我自己而不是使用他们自己的问题他们早就修好了。

答案 1 :(得分:-1)

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