网络加密(TLS)
SSL 已被弃用
TLS是安全套接层(SSL)加密的后继者。 SSL已完全已弃用截至2018年6月30日。
概述
MinIO 支持传输层安全性(TLS)1.2+ 版本的入站和出站流量加密。 MinIO 能够自动检测在默认或自定义搜索路径中指定的证书,并为所有连接启用 TLS。 MinIO 支持来自客户端的服务器名称指示(SNI)请求,MinIO 会尝试根据客户端指定的主机名定位相应的 TLS 证书。
MinIO 需要至少一个单一的默认TLS证书,并且可以支持多个TLS证书以支持SNI连接。 MinIO使用TLS主题备用名称(SAN)列表来确定向客户端返回哪个证书。 如果MinIO找不到其SAN覆盖客户端请求的主机名的TLS证书,MinIO将使用默认证书并尝试建立握手。
您可以指定一个单一的TLS证书,该证书涵盖MinIO部署接受连接的所有可能SAN。
此配置需要最少的设置,但必然会将 TLS SAN 中配置的所有主机名暴露给连接的客户端。 根据您的 TLS 配置,这可能包括内部或私有的 SAN 域名。
您可以改为指定多个按域名分隔的TLS证书,并为任何不匹配的主机名请求设置一个默认证书。 这种配置需要更多设置,但仅暴露返回的TLS SAN数组中配置的那些主机名。
MinIO TLS on Kubernetes
MinIO Kubernetes Operator 为 MinIO 租户提供三种配置 TLS 的方法:
- 使用集群签名 API 实现自动 TLS
对于具有有效TLS 集群签名证书MinIO Kubernetes Operator 能够自动生成 TLS 证书,同时部署 or 修改一个 MinIO 租户。
Kubernetes TLS API 在生成新 TLS 证书时使用 Kubernetes 集群证书颁发机构(CA)签名算法。 参见支持的 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).主题备用名称证书
如果您拥有自定义主题备用名称 (SAN) 证书,不同时一个通配符证书,TLS证书SAN必须应用到其父节点的主机名。 如果没有通配符,SAN 必须完全匹配才能连接到租户。
- cert-manager 证书管理
MinIO Operator 支持使用cert-manager作为其内置自动证书管理功能的完全替代方案oruser-driven manual certificate management. 有关使用 cert-manager 部署 MinIO Operator 和租户的说明,请参阅cert-manager page.
- 手动证书管理
- The Tenant CRD spec
spec.externalCertsSecretsupp .. include:: /includes/common/common-configure-keycloak-identity-management.rst - 开始之后:
start-configure-keycloak-minio-cli
指定端口的
opaqueorkubernetes.io/tls类型secrets包含private.key和public.crt用于 TLS。
您可以指定多个证书以支持分配了多个主机名的租户。
- The Tenant CRD spec
自签名、内部、私有证书,以及带有中间证书的公共CA
如果部署使用非全局或非公共证书颁发机构签发的证书的 MinIO 租户,or如果使用需要中间证书的全局CA,您必须向Operator提供这些CA,以确保它能够信任这些证书。
操作员可能会记录与使用不受信任证书部署的租户相关的TLS证书验证警告。
以下过程附加一个包含public.crt证书颁发机构对 MinIO Operator 的配置。
您可以在单个证书中指定多个 CA,只要您保持BEGIN和END分隔符保持原样。
创建
operator-ca-tls秘密以下内容在 MinIO Operator 命名空间中创建一个 Kubernetes secret(
minio-operator).kubectl create secret generic operator-ca-tls \ --from-file=public.crt -n minio-operator
The
public.crt文件必须对应一个包含一个或多个CA定义的有效TLS证书。重启 Operator
创建后,必须重启 Operator 以加载新的 CA:
kubectl rollout restart deployments.apps/minio-operator -n minio-operator
MinIO Baremetal TLS
MinIO Server 会为每个节点搜索 TLS 密钥和证书,并使用这些凭据启用 TLS。 MinIO 在发现并验证证书后会自动启用 TLS。 搜索位置取决于您的 MinIO 配置:
默认情况下,MinIO 服务器会在以下目录中查找每个节点的 TLS 密钥和证书:
${HOME}/.minio/certs
哪里${HOME}是运行 MinIO Server 进程的用户的主目录。
您可能需要创建${HOME}/.minio/certs如果目录不存在。
对于systemd托管部署中这必须对应于USER运行 MinIO 进程。
如果该用户没有主目录,请使用自定义路径作为替代选项。
您可以为 MinIO 服务器指定一个路径来搜索证书,使用minio server --certs-dir or -Sparameter.
例如,以下命令片段指示 MinIO 进程使用/opt/minio/certsTLS证书目录。
minio server --certs-dir /opt/minio/certs ...
运行 MinIO 服务的用户必须对此目录拥有读写权限。
放置默认域名的TLS证书(例如minio.example.net) 在/certs目录,其中私钥作为private.key和公共证书public.crt.
对于分布式 MinIO 部署,部署中的每个节点都必须具有匹配的 TLS 证书配置。
自签名、内部、私有证书,以及带有中间证书的公共CA
如果使用由非全局或非公共证书颁发机构签发的证书,or如果使用需要中间证书的全局CA,您必须向MinIO服务器提供这些CA。 如果MinIO服务器没有必要的CA,在连接到其他服务时可能会返回与TLS验证相关的警告或错误。
将 CA 证书放置在/certs/CAsfolder.
此文件夹的根路径取决于您是否使用默认证书路径or自定义证书路径 (minio server --certs-dir or -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 签名的证书时返回错误。
第三方证书颁发机构
MinIO Server 会对照主机系统的可信根证书存储库,验证每个连接客户端提供的 TLS 证书。
将 CA 证书放置在/certs/CAsfolder.
此文件夹的根路径取决于您是否使用默认证书路径or自定义证书路径 (minio server --certs-dir or -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 匹配,服务器将拒绝该连接并视为无效。
支持的 TLS 密码套件
MinIO 推荐生成 ECDSA(例如NIST P-256 曲线) 或 EdDSA(例如Curve25519) TLS 私钥/证书,因为与 RSA 相比,它们的计算要求较低。
MinIO 支持以下由 Go 标准库提供的 TLS 1.2 和 1.3 密码套件:Go. 该列表用icon:
TLS_CHACHA20_POLY1305_SHA256TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384