生成并更新 Let's Encrypt 证书

生成并更新 Let's Encrypt 证书

我的域名是(示例):mydomain.eu,它通过 np-ip 与我的动态 IP 同步。
在家里,我有一个监听端口 80/443 的 Web 服务器,我使用 certbot 从 Let's Encrypt 获得了一个新的通配符证书,并使用 DNS 记录 (txt) 进行部署。

我认为这已经足够了,但是不行...
我需要另一台服务器的证书(cname mydomain.eu:cloud.mydomain.eu e mail.mydomain.eu)并且我在我的提供商面板上设置了 cname。

此外,我还使用 Nextcloud 设置了一个云服务器,我想为该服务器获取证书。我收到错误,因为 certbot 需要 80 和 443 端口,但我的 Ncserver 监听端口 81 和 1443。将来,我将创建一个内部网络邮件,它还会监听另一个端口

内部设置

Example:
WEBSERVER # www.mydomain.eu - nginx - ip xxx.xxx.xxx.50 --> port 80/443
NEXTCLOUD # cloud.mydomain.eu - apache - ip xxx.xxx.xxx.51 -> port 81/1443
MAIL # mail.cloud.mydomain.eu - nginx/apache - ip xxx.xxx.xxx.52 -> port 82/2443

Nginx Web 服务器配置:

ssl_certificate /etc/letsencrypt/live/mydomain.eu/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.eu/privkey.pem;

server {
listen 80;
listen [::]:80;
server_name *.mydomain.eu;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name *.mydomain.eu;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}

server {
listen 80;
listen [::]:80;
server_name cloud.mydomain.eu;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name cloud.mydomain.eu;

location / {
proxy_pass http://xxx.xxx.xxx.51:1443;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}

为每个服务器获取证书(或通配符证书)的最佳做法是什么?我会很好地激活 cron 来更新证书,而无需txt每三个月部署一次记录

答案1

如果所有域都在同一主机上,您只需在其他配置中使用同一个文件即可(您提到通配符证书可用)...

是否要在更多服务上(重复)使用一个通配符或每个子域使用额外的证书取决于您。无论如何,如果您有通配符证书并且计划自动更新它,您无论如何都需要 DNS 令牌验证(TXT 记录),并且一旦使用 DNS 验证了域,您甚至不需要运行服务器来获取证书...因此在“每个域”证书的情况下,您可以使用域的 DNS 验证,因此非标准端口没有问题。

无论如何,在通配符证书的情况下,将所有证书放在标准 80/443 端口上不是更容易吗?目前,SNI 没有问题(共享端口并根据请求内容进行区分)。在这种情况下,您可以让一个反向代理(例如 haproxy)处理通配符证书并将流量传递到后端(nginx、apache httpd,...)

--- 编辑 - 2020 年 1 月 19 日:22:40 CET ---

如果您的 DNS 提供商不提供“简单”的 DNS 更新,您可以将所需的“子域”委托给您的系统,并或多或少地运行本地 DNS 服务器以应对这种动态更新 - TXT 记录...

假设域示例.com并且您的本地节点具有更新的 fqdnlocal-example.com.noip.com指向您的系统。在注册商的系统中,您可以进行静态记录:

_acme-challenge.example.com. 3600 IN NS local-example.com.noip.com.

这样,您可以轻松地将 example.com 域的 DNS 令牌委托给本地系统。在那里,您可以使用配置的域运行本地 DNS 服务器(例如 bind)_acme-challenge.example.com然后您可以在本地更新 TXT 记录。请注意,此域中既不是有效的记录 A,也不是有效的记录 AAAA,因此至少对于 TXT 来说只有 SOA、NS 和动态更新 ;-)。

相关内容