網路加密 (TLS)
MinIO 支援傳輸層安全性 (TLS) 1.2+ 對傳入和傳出流量進行加密。
SSL 已棄用
TLS 是安全通訊端層 (SSL) 加密的後繼者。自 2018 年 6 月 30 日起,SSL 已完全棄用。
啟用 TLS
以下各節說明如何為 MinIO 啟用 TLS。您可以使用來自知名憑證授權單位、內部或私有 CA 或自我簽署憑證的 TLS 憑證。
在開始之前,請注意以下要點
在每個節點上設定 TLS。
確保執行 MinIO 伺服器程序的使用者可以讀取憑證。
更新
MINIO_VOLUMES
以及任何所需的服務或應用程式,以使用HTTPS
URL。
MinIO 伺服器會搜尋每個節點的 TLS 金鑰和憑證,並使用這些憑證來啟用 TLS。搜尋位置取決於您的 MinIO 設定
預設情況下,MinIO 伺服器會在以下目錄中尋找每個節點的 TLS 金鑰和憑證
${HOME}/.minio/certs
其中 ${HOME}
是執行 MinIO 伺服器程序的使用者的主目錄。如果 ${HOME}/.minio/certs
目錄不存在,您可能需要建立該目錄。
對於 systemd
管理的部署,這必須對應於執行 MinIO 程序的 USER
。如果該使用者沒有主目錄,請改用 自訂路徑 選項。
您可以使用 minio server --certs-dir
或 -S
參數指定 MinIO 伺服器搜尋憑證的路徑。
例如,以下命令片段指示 MinIO 程序使用 /opt/minio/certs
目錄來存放 TLS 憑證。
minio server --certs-dir /opt/minio/certs ...
執行 MinIO 服務的使用者必須擁有此目錄的讀取和寫入權限。
將預設網域 (例如 minio.example.net
) 的 TLS 憑證放置在 /certs
目錄中,私密金鑰為 private.key
,公開憑證為 public.crt
。
例如
/path/to/certs
private.key
public.crt
您可以使用 MinIO certgen 來產生自我簽署的憑證,以便使用啟用 TLS 的 MinIO 進行評估。例如,以下命令會產生一個自我簽署的憑證,其中包含一組與 MinIO 伺服器主機相關聯的 IP 和 DNS 主題替代名稱 (SAN)
certgen -host "localhost,minio-*.example.net"
將產生的 public.crt
和 private.key
放置到 /path/to/certs
目錄中,即可為 MinIO 部署啟用 TLS。應用程式可以使用 public.crt
作為信任的憑證授權單位,允許連線到 MinIO 部署,而無需停用憑證驗證。
如果您正在重新設定先前未啟用 TLS 的現有部署,請更新 MINIO_VOLUMES
以指定 https
而不是 http
。您可能也需要更新應用程式或用戶端使用的 URL。
多網域式 TLS 憑證
MinIO 伺服器支援多個 TLS 憑證,其中伺服器使用 伺服器名稱指示 (SNI) 來識別在回應用戶端請求時要使用的憑證。當用戶端使用特定的主機名稱連線時,MinIO 會使用 SNI 來選取該主機名稱的適當 TLS 憑證。
例如,考慮一個可透過以下主機名稱存取的 MinIO 部署
https://minio.example.net
(預設 TLS 憑證)https://s3.example.net
https://minio.internal-example.net
將憑證放置於 /certs
資料夾中,為每個 MinIO 應呈現 TLS 憑證的額外網域,在 /certs
中建立子資料夾。雖然 MinIO 對於資料夾名稱沒有要求,但考慮建立名稱與網域相符的子資料夾,以提高人類可讀性。將該網域的 TLS 私鑰和公鑰放置在子資料夾中。
此資料夾的根路徑取決於您使用預設憑證路徑或自訂憑證路徑(minio server --certs-dir
或 -S
)。
${HOME}/.minio/certs
private.key
public.crt
s3-example.net/
private.key
public.crt
internal-example.net/
private.key
public.crt
以下範例假設 MinIO 伺服器使用 --certs dir | -S /opt/minio/certs
啟動
/opt/minio/certs
private.key
public.crt
s3-example.net/
private.key
public.crt
internal-example.net/
private.key
public.crt
雖然您可以使用單一 TLS 憑證來涵蓋所有具有多個主體別名(SAN)的主機名稱,但這會向任何檢查伺服器憑證的客戶端揭露 internal-example.net
和 s3-example.net
主機名稱。為每個主機名稱使用 TLS 憑證可以更好地保護每個主機名稱免於被發現。各個 TLS 憑證的 SAN 必須適用於其各自父節點的主機名稱。
如果客戶端指定的主機名稱或 IP 位址與任何已配置的 TLS 憑證不符,則連線通常會因憑證驗證錯誤而失敗。
支援的 TLS 加密套件
MinIO 建議產生 ECDSA (例如 NIST P-256 曲線) 或 EdDSA (例如 Curve25519) TLS 私鑰/憑證,因為相較於 RSA,它們的計算需求較低。
MinIO 支援 Go 所支援的以下 TLS 1.2 和 1.3 加密套件。列表以圖示標記建議的演算法圖示
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
自我簽署、內部、私有憑證以及具有中間憑證的公開 CA
如果使用非全球或非公開憑證授權單位簽署的憑證,或如果使用需要使用中間憑證的全球 CA,則必須將這些 CA 提供給 MinIO 伺服器。如果 MinIO 伺服器沒有必要的 CA,則在連線到其他服務時,可能會傳回與 TLS 驗證相關的警告或錯誤。
將 CA 憑證放置於 /certs/CAs
資料夾中。此資料夾的根路徑取決於您使用預設憑證路徑或自訂憑證路徑(minio server --certs-dir
或 -S
)
mv myCA.crt ${HOME}/.minio/certs/CAs
以下範例假設 MinIO 伺服器使用 --certs dir /opt/minio/certs
啟動
mv myCA.crt /opt/minio/certs/CAs/
對於自我簽署的憑證,憑證授權單位通常是用於簽署憑證的私鑰。
對於由內部、私有或其他非全球憑證授權單位簽署的憑證,請使用簽署憑證的相同 CA。非全球 CA 必須包含從中間憑證到根憑證的完整信任鏈。
如果提供的檔案不是 X.509 憑證,則 MinIO 會忽略它,並且可能會傳回驗證由該 CA 簽署的憑證的錯誤。