如何获得面向非公开服务器的Let's Encrypt证书?


9

我有一台专用的Apache服务器,只能从我的LAN上的端口443上通过StartSSL证书访问。

自Firefox 51发布以来,由于已从信任库中删除了StartSSL根证书,因此我无法再连接到它。

我考虑过迁移到“让我们加密”,但是这似乎需要面向公众的HTTP服务器。在我的情况下可以使用“让我们加密”吗?

如果可能的话,我宁愿避免支付SSL证书的费用。

Answers:


10

如果控制域的DNS,则可以使用dns-01质询方法通过创建TXT记录来证明所有权。

这可以手动或自动完成。我认为即使是官方certbot客户端现在也支持dns-01。

一个快速的Google向我展示了一堆使用各种脚本和客户端的教程,因此在此不再赘述。这是专门使Intranet证书自动化的工具。


您确定它确实可以在Intranet上运行吗?如果我仅覆盖运行certbot的主机的/etc/resolv.conf怎么办?
彼得-恢复莫妮卡的时间

@peterh是的,它可以根据文档在Intranet上运行。
BE77Y

@peterh我不确定您通过覆盖resolv.conf尝试什么。由于Let's Encrypt验证服务器(而不是certbot客户端)需要能够解析记录,因此需要在公共DNS中创建TXT记录。如果这一切都发生在本地,那么验证就不会值钱。但是,为其颁发证书的服务器可以是完全私有的。
Martijn Heemels,

@MartijnHeemels好吧,现在我已经无法理解我的旧评论了。我通过用某种方式欺骗它的DNS来创建一个具有letencrypt的Intranet证书,它显示了针对所有* .intranet.mydomain请求的具有公共ip的第三台服务器,但仅对letencrypt的传出DNS服务器起作用。我通过tcpdumping输入的DNS通信获得了它们的IP。Bind9为此具有所谓的“视图”。因此,该第三台服务器可以获得* .intranet.mydomain证书,并为此配置了棘手的apache配置。之后,可以使用rsync脚本将密钥镜像到Intranet。
彼得-恢复莫妮卡

@MartijnHeemels之所以这样做,是因为当时我无法自动化letencrypt的基于区域的授权。也许现在可以正常工作了,但是老实说,我对letencrypt总体上不太满意(嗯...由于其自动化的麻烦,当然,我高兴它存在)并且我不想使其再次正常工作,我曾经做的还可以。(我想我们都知道老板们对“让它变得更好”这样的任务的态度。)
彼得-恢复莫妮卡

5

certbot客户端可以执行手动DNS质询。此问题中的(当前第二受欢迎的)答案如何使用“让我们加密DNS挑战验证”?包含所有细节,我刚刚对其进行了测试。

基本上,您运行此命令并按照说明进行操作:

certbot -d site.your.dom.ain --manual --preferred-challenges dns certonly

0

您提到您正在使用Apache,但是,如果未绑定到Apache,则可以使用Caddyserver轻松完成

您只需在其中定义Caddyfile以下内容:

example.com
tls {
    dns cloudflare
}

在配置中提及您正在使用的DNS提供程序,并通过环境变量配置您使用的API密钥。从docs支持的提供程序列表中抽取。

这就是所需要的。第一次启动的输出将类似于:

Activating privacy features... 2019/10/21 13:36:48 [INFO][cache:0xc0001c8190] Started certificate maintenance routine
[INFO][cache:0xc000092730] Started certificate maintenance routine
2019/10/21 13:24:49 [INFO][example.com] Obtain certificate
2019/10/21 13:24:49 [INFO] [example.com] acme: Obtaining bundled SAN certificate
2019/10/21 13:24:50 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/876706285
2019/10/21 13:24:50 [INFO] [example.com] acme: Could not find solver for: tls-alpn-01
2019/10/21 13:24:50 [INFO] [example.com] acme: Could not find solver for: http-01
2019/10/21 13:24:50 [INFO] [example.com] acme: use dns-01 solver
2019/10/21 13:24:50 [INFO] [example.com] acme: Preparing to solve DNS-01
2019/10/21 13:24:50 [INFO] cloudflare: new record for example.com, ID XXX
2019/10/21 13:24:50 [INFO] [example.com] acme: Trying to solve DNS-01
2019/10/21 13:24:50 [INFO] [example.com] acme: Checking DNS record propagation using [127.0.0.11:53]
2019/10/21 13:24:50 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2019/10/21 13:24:50 [INFO] [example.com] acme: Waiting for DNS record propagation.
2019/10/21 13:24:52 [INFO] [example.com] acme: Waiting for DNS record propagation.
2019/10/21 13:24:55 [INFO] [example.com] The server validated our request
2019/10/21 13:24:55 [INFO] [example.com] acme: Cleaning DNS-01 challenge
2019/10/21 13:24:55 [INFO] [example.com] acme: Validations succeeded; requesting certificates
2019/10/21 13:24:56 [INFO] [example.com] Server responded with a certificate.
done.

Serving HTTPS on port 443
https://example.com

2019/10/21 13:36:48 [INFO] Serving https://example.com

Serving HTTP on port 80
http://example.com

2019/10/21 13:36:48 [INFO] Serving http://example.com
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.