文档

网络加密 (TLS)

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

SSL 已弃用

TLS 是安全套接字层 (SSL) 加密的继任者。SSL 已于 2018 年 6 月 30 日完全弃用

启用 TLS

以下部分介绍如何为 MinIO 启用 TLS。您可以使用来自知名证书颁发机构的 TLS 证书、内部或私有 CA 或自签名证书。

在开始之前,请注意以下重要事项

  • 在每个节点上配置 TLS。

  • 确保证书可被运行 MinIO 服务器进程的用户读取。

  • 更新MINIO_VOLUMES 以及任何需要的服务或应用程序以使用 HTTPS URL。

使用 minio/minio:latest server --certs-dir 参数启动 MinIO 容器,并指定 MinIO 在其中搜索证书的目录的路径。启动容器时,您必须将本地主机卷安装到该路径,以确保 MinIO 服务器可以访问必要的证书。

将默认域 (例如 minio.example.net) 的 TLS 证书放置在指定的目录中,私钥为 private.key,公共证书为 public.crt。例如

/opts/certs
  private.key
  public.crt

您可以使用 MinIO certgen 生成自签名证书,以使用启用了 TLS 的 MinIO 进行评估。例如,以下命令会生成一个自签名证书,其中包含与 MinIO 服务器主机关联的一组 IP 和 DNS SAN。

certgen -host "localhost,minio-*.example.net"

您可能需要启动容器并设置一个与 TLS 证书 DNS SAN 匹配的 --hostname

将证书移动到容器将其安装到 --certs-dir 路径的本地主机机器路径。当 MinIO 容器启动时,服务器会在指定的 location 中搜索证书,并使用它们启用 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/minio:latest server --certs-dir 参数启动 MinIO 容器,并指定 MinIO 在其中搜索证书的目录的路径。启动容器时,您必须将本地主机卷安装到该路径,以确保 MinIO 服务器可以访问必要的证书。

将默认域(例如 minio.example.net)的 TLS 证书放置在指定目录中,私钥名为 private.key,公钥名为 public.crt。对于其他主机名,创建与域匹配的子文件夹以提高可读性。将该域的 TLS 私钥和公钥放置在子文件夹中。

例如

/opts/certs
  private.key
  public.crt
  s3-example.net/
    private.key
    public.crt
  internal-example.net/
    private.key
    public.crt

当 MinIO 容器启动时,服务器会在挂载的位置 /opts/certs 中搜索证书并使用它们启用 TLS。MinIO 使用关联的证书为连接到容器的客户端提供服务,这些客户端使用受支持的主机名。应用程序可以使用 public.crt 作为受信任的证书颁发机构来允许连接到 MinIO 部署,而无需禁用证书验证。

虽然您可以拥有一个涵盖所有主机名的单个 TLS 证书,其中包含多个主题备用名称 (SAN),但这会将 internal-example.nets3-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

第三方证书颁发机构

使用 minio/minio:latest server --certs-dir 参数启动 MinIO 容器,并指定 MinIO 在其中搜索证书的目录的路径。启动容器时,您必须将本地主机卷安装到该路径,以确保 MinIO 服务器可以访问必要的证书。

对于使用自定义 TLS 目录启动的部署 minio server --certs-dir,服务器会在该指定目录的 /CAs 路径中搜索。例如

/opts/certs
  private.key
  public.crt
  /CAs
    my-ca.crt

将每个 CA 的证书文件放置到 /CAs 子目录中。确保 MinIO 部署中的所有主机在该目录中都有一组一致的受信任 CA。如果 MinIO 服务器无法将传入客户端的 TLS 证书颁发者与任何可用 CA 匹配,则服务器会拒绝连接,因为它无效。

自签名、内部、私有证书以及带有中间证书的公共 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 签名的证书时可能会返回错误。