中文文档

网络加密(TLS)

MinIO支持传输层安全性(TLS)1.2+加密的进出流量。

SSL已废弃

TLS是安全套接字层(SSL)加密的后继者。 自2018年6月30日起,SSL已完全被废弃,详见 已弃用公告

启用 TLS

对于具有有效 集群签名证书, MinIO Kubernetes Operator 可以在部署或修改 MinIO 租户时自动生成 TLS 证书,前提是 Kubernetes 集群具有有效的,请查看 k8s 布署安全文档 或者 修改相关安全设置的文档 TLS 证书生成过程如下:

  • 该运算符将为租户生成与之关联的证书签名请求 (CSR)。 CSR 包括适合于租户服务和 Pod 的正确 DNS 主题备用名称 (SAN)。

    然后,该运算符会等待 CSR CSR () 被批准。

  • CSR 等待审批,如果正确配置,

Kubernetes TLS API可以自动批准 CSR 否则,集群管理员必须在Kubernetes生成必要的证书之前手动批准 CSR

  • 运营商将生成的TLS证书应用于租户中的每个MinIO Pod。

Kubernetes TLS API 使用 Kubernetes 集群的证书颁发机构(CA)签名算法来生成新的 TLS 证书。 请查看 支持的 TLS 密码套件 ,了解 MinIO 支持的完整 TLS 密钥套件列表和推荐的签名算法。

默认情况下,Kubernetes会在每个Pod上放置一个证书 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt . 这个CA包应当包含用来签署MinIO租户TLS证书的集群或根CA。 Kubernetes 集群中部署的其他应用程序可以信任此集群证书,使用 MinIO 服务 DNS 名称 (例如 https://minio.minio-tenant-1.svc.cluster-domain.example:443) 连接到 MinIO 租户。

主题备用名称证书

如果你有一个定制的主题备用名称 (SAN) 证书,且该证书不是通配符证书,那么 TLS 证书 SAN 必须 适用于其父节点的主机名。 如果没有通配符,则必须精确匹配 SAN 才能连接到租户。

使用 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 Operator 支持在 部署修改 MinIO 租户时附加用户指定的 TLS 证书。

这些自定义证书支持 服务器名称指示 (SNI),其中 MinIO 服务器根据连接客户端指定的主机名来确定使用哪个证书。 例如,您可以生成由您组织偏好的证书颁发机构(CA)签名的证书,并将这些证书附加到 MinIO 租户上。 信任该证书颁发机构 CA 的应用程序可以连接到 MinIO 租户,并完全验证租户的 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 Kubernetes Operator 可以在 部署修改 MinIO 租户时自动附加第三方证书颁发机构。

您可以在任何时候为租户添加、更新或删除证书颁发机构(CA)。 您必须重新启动 MinIO 租户,以便对配置的证书颁发机构(CA)所做的更改生效。

Operator将指定的证书颁发机构(CA)放置在每个 MinIO 服务器 Pod 上,以便所有 Pod 都有一组一致的受信任的 CA。

如果 MinIO 服务器无法将传入客户端的 TLS 证书发行者与任何可用的证书颁发机构(CA)进行匹配,服务器将拒绝该连接,认为其无效。

自签名、内部、私有证书以及带有中级证书的公共证书颁发机构(CAs)

如果正在部署使用非全局或非公共证书颁发机构发行的证书的 MinIO 租户, 或者 使用需要使用中级证书的全局证书颁发机构,那么您必须将这些证书颁发机构提供给操作员,以确保它可以信任这些证书。

如果操作员使用的是未受信任的证书部署租户,它可能会记录与 TLS 证书验证相关的警告。

以下步骤将包含证书颁发机构 public.crt 的密钥附加到 MinIO 操作员。 您可以在单个证书中指定多个证书颁发机构,只要保持 BEGINEND 分隔符不变。

  1. 创建 operator-ca-tls 密钥

    以下内容在 MinIO Operator 命名空间中创建一个 Kubernetes 密钥 ( minio-operator ).

    kubectl create secret generic operator-ca-tls \
       --from-file=public.crt -n minio-operator
    

    public.crt 文件必须对应于包含一个或多个 CA 定义的有效 TLS 证书。

  2. 重启Operator

    一旦创建,您必须重新启动操作员以加载新的证书颁发机构:

    kubectl rollout restart deployments.apps/minio-operator -n minio-operator
    
Join Slack 商业支持购买咨询