网络加密(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。
MinIO服务器会在以下目录中搜索TLS密钥和证书:
${HOME}/.minio/certs
对于使用自定义TLS目录启动的部署(如: minio server --certs-dir
),请使用该目录而不是默认目录。
要将TLS证书放置在默认域(例如 minio.example.net
)的 /certs
目录中,您需要将私钥命名为 private.key
,将公证书命名为 public.crt
。
例如:
${HOME}/.minio/certs
private.key
public.crt
其中 ${HOME}
是运行 MinIO Server 进程的用户的 home 目录。
如果 ${HOME}/.minio/certs
目录不存在,您可能需要创建它。
您可以使用MinIO的 certgen 工具来生成自签名的证书,以便在启用TLS的情况下评估MinIO。 例如,以下命令生成一个自签名证书,其中包含与 MinIO 服务器主机关联的一组 IP 和 DNS SAN:
certgen -host "localhost,minio-*.example.net"
将生成的 public.crt
和 private.key
放入 /.minio/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 证书。
虽然 MinIO 对文件夹名称没有特定要求,但为了提高可读性,建议创建与域名匹配的子文件夹名称。
将该域的 TLS 私钥和公钥放置在子文件夹中。
例如:
${HOME}/.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 证书 SAN 必须 适用于其父节点的主机名。
如果客户端指定的主机名或 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)文件放置在以下目录中:
${HOME}/.minio/certs/CAs
其中 ${HOME}
是运行 MinIO Server 进程的用户的 home 目录。
如果 ${HOME}/.minio/certs
目录不存在,您可能需要创建它。
对于使用自定义TLS目录启动的部署( minio server --certs-dir
),服务器会在指定目录下的 /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 签名的证书的错误。