网络加密 (TLS)
MinIO 支持传输层安全 (TLS) 1.2+ 对传入和传出流量的加密。
SSL 已弃用
TLS 是安全套接字层 (SSL) 加密的继任者。SSL 于 2018 年 6 月 30 日完全 弃用。
启用 TLS
以下部分描述了如何为 MinIO 启用 TLS。您可以使用来自知名证书颁发机构的 TLS 证书、内部或私有 CA 或自签名证书。
在开始之前,请注意以下重要事项
在每个节点上配置 TLS。
确保证书对运行 MinIO 服务器进程的用户可读。
更新
MINIO_VOLUMES
以及任何需要的服务或应用程序以使用HTTPS
URL。
MinIO 服务器在以下目录中搜索 TLS 密钥和证书
%%USERPROFILE%%\.minio\certs
对于使用自定义 TLS 目录启动的部署 minio server --certs-dir
,请使用该目录而不是默认目录。
将默认域(例如 minio.example.net
)的 TLS 证书放在 /certs
目录中,私钥为 private.key
,公钥证书为 public.crt
。
例如
%%USERPROFILE%%\.minio\certs
private.key
public.crt
其中 %%USERPROFILE%%
是运行 MinIO 服务器进程的用户的 用户配置文件文件夹 的位置。
您可以使用 MinIO certgen 生成自签名证书,以评估启用 TLS 的 MinIO。例如,以下命令生成一个自签名证书,其中包含一组与 MinIO 服务器主机关联的 IP 和 DNS SAN:
certgen.exe -host "localhost,minio-*.example.net"
将生成的 public.crt
和 private.key
放入 \.minio\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
为 MinIO 应该提供 TLS 证书的每个额外域在 /certs
中创建一个子文件夹。虽然 MinIO 对文件夹名称没有要求,但请考虑创建与域匹配的子文件夹名称,以提高人类的可读性。将该域的 TLS 私钥和公钥放在子文件夹中。
例如
%%USERPROFILE%%\.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 支持以下 TLS 1.2 和 1.3 密码套件,如 Go 所支持。列表使用一个符号标记推荐的算法图标
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 签名的证书时返回错误。