文档

网络加密 (TLS)

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

SSL 已弃用

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

启用 TLS

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

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

  • 在每个节点上配置 TLS。

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

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

MinIO 服务器搜索每个节点的 TLS 密钥和证书,并使用这些凭据启用 TLS。搜索位置取决于您的 MinIO 配置

默认情况下,MinIO 服务器在以下目录中搜索每个节点的 TLS 密钥和证书

${HOME}/.minio/certs

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

对于systemd 管理的部署,这必须对应于运行 MinIO 进程的USER。如果该用户没有主目录,请改用自定义路径选项。

您可以使用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 主题备用名称 (SAN)。

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

将生成的 public.crtprivate.key 放入 /path/to/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 证书的每个额外域在 /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

虽然您可以拥有一个涵盖所有主机名的单个 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 服务器会针对主机系统的受信任根证书存储验证每个连接客户端提供的 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 匹配,则服务器会拒绝该连接,因为它无效。

自签名、内部、私有证书和具有中间证书的公共 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 签名的证书的错误。