中文文档

网络加密(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.crtprivate.key 文件放置到 /path/to/certs 目录中,以启用 MinIO 部署的 TLS 功能。 应用程序可以使用 public.crt 作为受信任的证书颁发机构,以允许连接到MinIO部署,而无需禁用证书验证。

如果您正在重新配置一个之前未启用TLS的现有部署,请更新环境变量 MINIO_VOLUMES,将其指定为 https 而不是 http 。 您可能还需要更新应用程序或客户端使用的URL。

Supported Secret Types

MinIO 支持在 Kubernetes 中使用三种类型的 secrets

  1. opaque

    使用 private.keypublic.crt 文件。

  2. tls

    使用 tls.keytls.crt 文件.

  3. cert-manager 1.7.x 更高版本

    在 Kubernetes 1.21 或更高版本上运行。

备注

为了获得最佳的 tlscert-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.nets3-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 签名的证书的错误。

Join Slack 商业支持购买咨询