Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

3.2.7. 双向 TLS 身份验证

可以使用 mutual TLS 身份验证限制对路由器和后端服务的客户端访问。路由器将拒绝来自不在 通过身份验证 的集合中的客户端的请求。双向 TLS 身份验证是在客户端证书上实施的,可以根据签发证书的证书颁发机构(CA)控制,证书撤销列表和/或任何证书主题过滤器。在创建路由器时,使用 mutual tls 配置选项 --mutual-tls-auth, --mutual-tls-auth-ca, --mutual-tls-auth-crl--mutual-tls-auth-filter

$ oc adm router --mutual-tls-auth=required  \
                --mutual-tls-auth-ca=/local/path/to/cacerts.pem   ....

--mutual-tls-auth 的值是 required, optional, 或 nonenone 是默认值。--mutual-tls-auth-ca 值指定包含一个或多个 CA 证书的文件。路由器使用这些 CA 证书来验证客户端的证书。

可以使用 --mutual-tls-auth-crl 指定证书撤销列表,以处理证书(由有效认证机构签发)被撤销的情况。

$ oc adm router --mutual-tls-auth=required  \
     --mutual-tls-auth-ca=/local/path/to/cacerts.pem  \
     --mutual-tls-auth-filter='^/CN=my.org/ST=CA/C=US/O=Security/OU=OSE$'  \
     ....

--mutual-tls-auth-filter 值可用于根据证书主题进行精细的访问控制。该值是一个正则表达式,用于匹配证书的主题。

注意

上面的 mutual TLS 身份验证过滤器显示了一个限制性正则表达式(regex),包括在 ^$ 之间,这会完全准确匹配证书的主题。如果您决定使用限制较小的正则表达式,请注意这可能与您认为有效的任何 CA 颁发的证书匹配。建议您使用 --mutual-tls-auth-ca 选项,以便您更精细地控制发布的证书。

使用 --mutual-tls-auth=required 可确保您只允许经过身份验证的客户端访问后端资源。这意味着始终 需要 客户端来提供身份验证信息(提供一个客户端证书)。要使 mutual TLS 身份验证可选,请使用 --mutual-tls-auth=optional (或使用 none 禁用它,这是默认设置)。请注意,optional 意味着您 不需要 客户端提供任何身份验证信息,如果客户端提供任何身份验证信息,这会在 X-SSL* HTTP 标头中传递给后端。

$ oc adm router --mutual-tls-auth=optional  \
     --mutual-tls-auth-ca=/local/path/to/cacerts.pem  \
     ....

启用 mutual TLS 身份验证支持时(使用 --mutual-tls-auth 标志的 required 值或 optional 值),客户端身份验证信息将以 X-SSL* HTTP 标头的形式传递给后端。

X-SSL* HTTP 标头 X-SSL-Client-DN 示例:证书主题的完整可分辨名称(DN)。X-SSL-Client-NotBefore :客户端证书启动日期为 YYMMDDhhmmss[Z] 格式。X-SSL-Client-NotAfter :客户端证书结束日期,采用 YYMMDDhhmmss[Z] 格式。X-SSL-Client-SHA1 :客户端证书的 SHA-1 指纹。X-SSL-Client-DER :提供客户端证书的完整访问权限。包含以 base-64 格式编码的 DER 格式的客户端证书。