网络加密(TLS)
MinIO支持传输层安全性(TLS)1.2+加密的进出流量。
SSL已废弃
TLS是安全套接字层(SSL)加密的后继者。 自2018年6月30日起,SSL已完全被废弃,详见 已弃用公告 。
启用 TLS
以下各节介绍了如何为MinIO启用TLS。 您可以使用来自知名证书颁发机构、内部或私有CA或自签名证书的TLS证书。
在开始之前,请注意以下几点要点:
每个节点配置TLS
请确保证书对运行MinIO服务器进程的用户可读。
更新
MINIO_VOLUMES
和任何需要使用HTTPS
URL的服务。
使用 cert-manager 进行证书管理
MinIO 操作员支持使用 cert-manager 完全替代其内置的自动证书管理 或 用户驱动的手动证书管理。 有关使用 cert-manager 部署 MinIO 操作员和租户的说明,请参阅 cert-manager 页面 。
MinIO 服务器会搜索每个节点的 TLS 密钥和证书,并使用这些凭据启用 TLS。 搜索位置取决于您的 MinIO 配置:
默认情况下,MinIO 服务器在以下目录中查找每个节点的 TLS 密钥和证书:
${HOME}/.minio/certs其中
${HOME}
是运行 MinIO Server 进程的用户的 home 目录。 如果${HOME}/.minio/certs
目录不存在,您可能需要创建它。对于由
systemd
管理的部署,这必须对应于运行 MinIO 进程的USER
。 如果该用户没有 home 目录,请使用 Custom Path 选项代替。您可以使用
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 主机名(SANs):
certgen -host "localhost,minio-*.example.net"将生成的
public.crt
和private.key
文件放置到/path/to/certs
目录中,以启用 MinIO 部署的 TLS 功能。 应用程序可以使用public.crt
作为受信任的证书颁发机构,以允许连接到MinIO部署,而无需禁用证书验证。如果您正在重新配置一个之前未启用TLS的现有部署,请更新环境变量
MINIO_VOLUMES
,将其指定为https
而不是http
。 您可能还需要更新应用程序或客户端使用的URL。
Supported Secret Types
MinIO 支持在 Kubernetes 中使用三种类型的 secrets:
opaque
使用
private.key
和public.crt
文件。
tls
使用
tls.key
和tls.crt
文件.cert-manager 1.7.x 更高版本
在 Kubernetes 1.21 或更高版本上运行。
备注
为了获得最佳的 tls 或 cert-manager 秘密支持,请升级到 Operator 版本 5.0.10 或更高版本。
基于多个域的 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
虽然您可以拥有一个包含多个主题备用名称(SANs)的单一 TLS 证书,覆盖所有主机名,但这会将 internal-example.net
和 s3-example.net
这些主机名暴露给任何检查服务器证书的客户。
为每个主机名使用一个 TLS 证书可以更好地保护每个单独的主机名不被发现。
每个单独的 TLS 证书的 SANs 必须 适用于它们各自父节点的主机名。
如果客户端指定的主机名或IP地址与任何配置的TLS证书不匹配,连接通常会因证书验证错误而失败。
支持的 TLS 密码套件
MinIO 建议生成 ECDSA(例如 NIST P-256 曲线)或 EdDSA(例如 Curve25519)TLS 私钥/证书,因为与 RSA 相比,它们的计算要求较低。
MinIO 支持 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
第三方证书颁发机构
MinIO 服务器会验证每个连接客户端所呈现的 TLS 证书,以确保它们与主机系统的受信任根证书存储中的证书相对应。
将 CA 证书放置在 /certs/CAs
文件夹中。
这个文件夹的根路径取决于您是使用默认证书路径 还是 自定义证书路径(使用 minio server --certs-dir
命令或 -S
)
mv myCA.crt ${HOME}/certs/CAs
以下示例假设 MinIO 服务器是使用 --certs-dir /opt/minio/certs
参数启动的:
mv myCA.crt /opt/minio/certs/CAs/
将每个 CA 的证书文件放置到 /CAs
子目录中。
确保 MinIO 部署中的所有主机在那个目录中有一致的受信任的 CA 集合。
如果 MinIO 服务器无法将传入客户端的 TLS 证书发行者与任何可用的证书颁发机构(CA)进行匹配,服务器将拒绝该连接,认为其无效。
自签名、内部、私有证书以及带有中级证书的公共证书颁发机构(CAs)
如果使用的是非全局或非公共证书颁发机构签名的证书, 或者 使用的是需要使用中级证书的全局证书颁发机构,那么您必须将这些证书颁发机构提供给 MinIO 服务器。 如果 MinIO 服务器没有必要的证书颁发机构,当连接到其他服务时,它可能会返回与 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/
重要
请勿使用或共享自签名证书的私钥。 出于信任目的,只能共享或分发公共证书。
如果提供的文件不是 X.509 证书,MinIO 会忽略它,并可能返回验证该 CA 签名的证书的错误。