網路加密 (TLS)
MinIO 支援傳輸層安全性 (TLS) 1.2+ 的傳入和傳出流量加密。
SSL 已過時
TLS 是安全通訊端層 (SSL) 加密的後繼者。自 2018 年 6 月 30 日起,SSL 已完全過時。
啟用 TLS
以下章節描述如何為 MinIO 啟用 TLS。您可以使用來自知名憑證授權單位、內部或私有 CA 或自我簽署憑證的 TLS 憑證。
在開始之前,請注意以下重點
在每個節點上設定 TLS。
確保執行 MinIO 伺服器程序的使用者可以讀取憑證。
更新
MINIO_VOLUMES
和任何需要的服務或應用程式,以使用HTTPS
URL。
使用 minio/minio:latest server --certs-dir
參數啟動 MinIO 容器,並指定 MinIO 在其中搜尋憑證的目錄路徑。啟動容器時,您必須掛載本機主機磁碟區到該路徑,以確保 MinIO 伺服器可以存取必要的憑證。
將預設網域 (例如 minio.example.net
) 的 TLS 憑證放置在指定的目錄中,私密金鑰為 private.key
,公開憑證為 public.crt
。例如
/opts/certs
private.key
public.crt
您可以使用 MinIO certgen 來產生自我簽署憑證,以便使用啟用 TLS 的 MinIO 進行評估。例如,以下命令會產生一個自我簽署憑證,其中一組 IP 和 DNS SAN 與 MinIO 伺服器主機相關聯
certgen -host "localhost,minio-*.example.net"
您可能需要啟動容器並設定與 TLS 憑證 DNS SAN 相符的 --hostname
。
將憑證移至容器掛載到其 --certs-dir
路徑的本機主機路徑。當 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
使用 minio/minio:latest server --certs-dir
參數啟動 MinIO 容器,並指定 MinIO 在其中搜尋憑證的目錄路徑。啟動容器時,您必須掛載本機主機磁碟區到該路徑,以確保 MinIO 伺服器可以存取必要的憑證。
將預設網域 (例如 minio.example.net
) 的 TLS 憑證放置在指定的目錄中,私鑰為 private.key
,公開憑證為 public.crt
。對於其他主機名稱,請建立一個與網域名稱相符的子資料夾,以提高人類可讀性。將該網域的 TLS 私鑰和公鑰放置在子資料夾中。
例如:
/opts/certs
private.key
public.crt
s3-example.net/
private.key
public.crt
internal-example.net/
private.key
public.crt
當 MinIO 容器啟動時,伺服器會搜尋掛載位置 /opts/certs
中的憑證,並使用它們來啟用 TLS。MinIO 會使用相關憑證為連線到容器且使用支援的主機名稱的用戶端提供服務。應用程式可以使用 public.crt
作為受信任的憑證授權單位,以允許連線到 MinIO 部署,而無需停用憑證驗證。
雖然您可以使用單一 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,您必須向 MinIO 伺服器提供這些 CA。如果 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 簽署的憑證的錯誤。