文档

网络加密 (TLS)

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

SSL 已弃用

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

启用 TLS

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

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

  • 在每个节点上配置 TLS。

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

  • 更新 MINIO_VOLUMES 以及任何需要的服务或应用程序以使用 HTTPS 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 服务器进程的用户的主目录。如果 ${HOME}/.minio/certs 目录不存在,您可能需要创建它。

您可以使用 MinIO certgen 为使用启用 TLS 的 MinIO 进行评估来铸造自签名证书。例如,以下命令生成一个自签名证书,该证书与 MinIO 服务器主机关联的一组 IP 和 DNS SAN。

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

将生成的 public.crtprivate.key 放入 /.minio/certs 目录中,以启用 MinIO 部署的 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

/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

虽然您可以使用包含多个主题备用名称 (SAN) 的单个 TLS 证书来涵盖所有主机名,但这会将 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 服务器会根据主机系统的受信任根证书存储验证每个连接客户端提供的 TLS 证书。

您可以在以下目录中放置其他受信任的证书颁发机构文件

${HOME}/.minio/certs/CAs

其中 ${HOME} 是运行 MinIO 服务器进程的用户的主目录。如果 ${HOME}/.minio/certs 目录不存在,您可能需要创建它。

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

将每个 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 签署的证书的错误。