對透過 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 挑戰,但這對於這種情況來說不是必要的,甚至不是最佳的。

日誌還表明 Let'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

相關內容