对于通过 nginx 提供服务的子域名,使用 certbot 的正确方法是什么?

对于通过 nginx 提供服务的子域名,使用 certbot 的正确方法是什么?

我想我一定是遗漏了一些东西,因为每次我尝试通过点击浏览器中的子域名来加载内容时,它都会显示“不安全”,即使我按照运行后的步骤操作而sudo certbot --nginx没有出现错误。

这是我的虚拟主机的配置文件:

server {                                                                                                                                         
        listen 80;                                                                                                                               
        listen [::]:80;                                                                                                                          

        root /var/www/lms/;                                                                                                                      

        server_name lms.blainelafreniere.io;                                                                                                     

        location / {                                                                                                                             
                try_files $uri /index.html;                                                                                                      
        }                                                                                                                                        
}                                                                                                                                                

server {

        server_name lms-api.blainelafreniere.io;

        location / {
                proxy_pass http://127.0.0.1:3001;
        }

        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/lms-api.blainelafreniere.io/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/lms-api.blainelafreniere.io/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}


server {
    if ($host = lms-api.blainelafreniere.io) {

        return 301 https://$host$request_uri;
    } # managed by Certbot
    listen 80;
    listen [::]:80;

    server_name lms-api.blainelafreniere.io;
    return 404; # managed by Certbot
}

我不知道这是否重要,但是... 主根域 blainelafreniere.io 指向完全不同的 VPS。我的 blainelafreniere.io 域使用自己的 SSL 证书进行保护,我目前正尝试仅为子域(在本例中为 lms-api.blainelafreniere.io)生成新的 SSL 证书。

blainelafreniere.io => 服务器 A lms.blainelafreniere.io, lms-api.blainelafreniere.io => 服务器 B

主域名的证书是否也需要用于保护子域名?或者我可以为每个子域名生成一个新证书吗?

答案1

随着HTTP-01 挑战您只能获取指定(可能具有多个 SAN)主机名的证书。根据证书透明度日志blainelafreniere.io您没有 的通配符证书*.blainelafreniere.io,因此您甚至无法对子域名使用相同的证书。(可以使用DNS-01 挑战,但对于这种情况来说,这不是必要的,甚至不是最佳的。)

日志还显示 L​​et's Encrypt 已成功为您的两个子域名(lms.apilms)颁发了证书,并且这是正确的做法

对于自动续订,您必须保持http://example.com/.well-known/acme-challenge/可访问性并为 Let´s Encrypt / Certbot 配置中指定的位置提供服务(例如 下/etc/letsencrypt/renewal/)。

目前,服务器34.200.239.16根本没有响应 HTTPS 请求。这不是证书的问题;要么是您的 Nginx 没有监听端口 443,要么是防火墙阻止了它:

$ dig lms.blainelafreniere.io +short
34.200.239.16

$ dig lms-api.blainelafreniere.io +short
34.200.239.16

nc 34.200.239.16 443 -nvvv
(UNKNOWN) [34.200.239.16] 443 (https) : Connection timed out
 sent 0, rcvd 0

相关内容