Ssl-Certificate

應該如何使用 Let’s Encrypt 為多個單獨的子域伺服器頒發/更新證書?

  • April 28, 2020

升級我的家庭基礎設施以學習和提高安全性,我無法找出如何最好地獲得證書問題並在我的伺服器上安裝,其中包括:

  • 防火牆(pfSense - FreeBSD):fw.example.com
  • NAS(Openmediavault - Debian Buster):nas.example.com:80nas.example.com:443
  • 網路控制器(Unifi在與 NAS 相同的 Debian Buster 上)nas.example.com:8443
  • 影片控制器(Unifi 同上)nas.example.com:7443
  • 家庭自動化(hass.io 上的家庭助理)home.example.com:8123

有了這樣的背景:

  1. 我是否應該通過 Cron 在每台伺服器上執行 ACME 協議軟體(Certbot、 acme.sh 或同等軟體)以讓 Let’s Encrypt 問題和更新證書?或者我應該在一台伺服器上執行此操作並設置將生成的公鑰和私鑰複製到其他伺服器?
  2. 是一個具有域本身 (example.com) 的主題備用名稱(SAN) 的證書,並且每個子域 (fw.example.com、nas.example.com 和 home.example.com) 或萬用字元 (*.example)一個證書.com,它限制了身份驗證方法)。還是每個伺服器都應該獲得自己的證書?

目前,除了防火牆之外,只有 Home Assistant 將面向外部。因此,它是問題/續訂過程的明顯候選者(鑑於我的註冊商是 Google Domains,他們不支持DNS-O1,所以如果我不是每三個月手動續訂一次,我需要一個 HTTP 伺服器用於 HTTP-01 )。

將來,我想按順序在防火牆上實現 OpenVPN。我的理解是,證書是/應該是私下生成的。

進一步的研究表明,HA 代理僅用於內部網站。有道理,因為它減少了需要目前證書的地方。但是需要 https 的軟體:(例如 Unifi 控制器)不會抱怨,因為它不會知道它正在被安全訪問,因為這是由 HA 代理處理的。對此有什麼想法?

首先,介紹一下 Let’s Encrypt 和 Certbot 的工作原理:

Certbot 已經在網路伺服器上自動執行證書請求、生成和安裝。因此,您將 Certbot 安裝在面向 Internet 的 Web 伺服器上,它會從 Let’s Encrypt 請求證書,修改 Web 伺服器配置以使用所述證書,並處理證書的後續更新。所以沒有必要自動化這部分。

但是,需要將證書自動複製到內部需要它的每個服務。

希望這能回答你的第一個問題。

其次,SAN 是將使用證書的服務的名稱。所以通常你可能有一個 Web 伺服器,它提供許多不同的 API 和站點和服務。無需為每個不同的站點配置單獨的證書,您只需使用多個 SAN 將它們全部組合成一個證書,並且只需要處理更新單個證書。

我能想到的不在多台伺服器上使用多 SAN 證書的唯一技術原因是,您將證書中的私鑰分散到多台伺服器上,這意味著您要更多地公開私鑰,如果一台伺服器受到威脅,您的所有伺服器都受到威脅。

在業務環境中,您嘗試通過為每台伺服器使用一個證書來避免這種情況,但是在多台伺服器上使用的萬用字元證書並沒有什麼不同,而且這種情況被大量使用。通常,萬用字元是一種省錢的方法,因為證書可能非常昂貴,但在您的情況下,這並不重要,因為 LE 是免費的。

在您的情況下,我只需在一個證書中列出所有不同的名稱,讓 Certbot 處理請求和更新該證書,然後使用一些程式碼將證書複製到您需要的任何地方。

另一種選擇是使用帶有 NGINX 的 Web 伺服器作為反向代理,並在那裡進行所有 HTTPS 加密,這樣只有 NGINX 伺服器需要證書,而您不需要將內部伺服器暴露給 Internet。它更安全一些,但您最終需要維護一台伺服器。

最後,幸運的是,OpenVPN 使用它自己的證書,因此您無需為此擔心從 CA 獲取外部證書。我能給你的唯一提示是確保 OpenVPN 使用的內部 CA 有很長的有效期(10 年),並且你的客戶端證書也有(>1 年)。

引用自:https://serverfault.com/questions/1013050