访问 API 代理中的 TLS 连接信息

您正在查看 Apigee Edge 文档。
前往 Apigee X 文档
信息

Edge 可让您创建支持单向和双向 TLS 的虚拟主机。使用单向 TLS 时,客户端向部署在 Edge 路由器上的虚拟主机发出会话请求,路由器会使用包含虚拟主机公钥的证书进行响应。对于签名证书,客户端随后可以向证书授权机构 (CA) 发出请求,以验证证书。

在双向 TLS 中,客户端和 Edge 都会传递证书,这些证书会作为请求的一部分进行验证:

  • Edge 路由器会将其证书提供给 TLS 客户端以进行身份验证。然后,客户端会在向服务器发送证书之前验证服务器的身份。
  • TLS 客户端会将其证书提供给 Edge 以进行身份验证。

如需了解详情,请参阅虚拟主机简介

捕获 TLS 连接信息

在通过支持 TLS 的虚拟主机向 API 代理发出请求期间,Edge 可以捕获有关 TLS 连接的信息。然后,您的 API 代理可以通过流变量访问该信息,以执行其他分析和验证。

Edge 捕获的 TLS 信息类型取决于虚拟主机是否支持单向或双向 TLS。例如,对于单向 TLS,Edge 可以捕获有关 TLS 连接中使用的 TLS 加密或 TLS 协议的信息。

对于双向 TLS,Edge 可以捕获与单向 TLS 捕获相同的所有信息,还可以捕获有关客户端证书的信息。例如,Edge 可以捕获 PEM 格式的客户端证书和客户端证书的 SHA1 指纹。

捕获单向和双向 TLS 的信息

下表列出了包含 Edge 捕获的 TLS 连接信息的流变量,并可供在 API 代理中访问。通过在虚拟主机定义中将 <ConnectionProperties> 设置为 true,可以捕获单向和双向 TLS 的此信息:

流变量 说明
tls.cipher TLS 连接使用的加密。
tls.protocol TLS 连接使用的协议。
tls.server.name 所请求的 SNI 服务器名称。
tls.session.id

会话标识符。

当您将 <ConnectionProperties><ClientProperties> 设置为 true 时,此流变量可用。

在双向 TLS 期间捕获其他 TLS 信息

下表列出了包含 Edge 在双向 TLS 中捕获的客户端证书详细信息的流变量。通过在虚拟主机定义中将 <ClientProperties> 设置为 true,可以捕获双向 TLS 的此信息:

流变量 说明
tls.client.s.dn 客户端证书的主题标识名 (DN)。
tls.client.i.dn 客户端证书的颁发者标识 (DN)。
tls.client.raw.cert PEM 格式的客户端证书。
tls.client.cert.serial 客户端证书的序列号。
tls.client.cert.fingerprint 客户端证书的 SHA1 指纹。
tls.session.id

会话标识符。

当您将 <ConnectionProperties><ClientProperties> 设置为 true 时,此流变量可用。

配置虚拟主机以捕获 TLS 信息

如需配置虚拟主机以捕获 TLS 信息,请将 <PropagateTLSInformation> 下的以下属性设置为 true

  • <ConnectionProperties>:启用单向和双向 TLS 的 TLS 连接信息捕获功能。默认值为 false
  • <ClientProperties>:启用双向 TLS 的其他信息捕获功能。默认值为 false

例如,以下虚拟主机定义使用双向 TLS,并允许捕获两种类型的 TLS 信息:

<VirtualHost name="secure">
    ....
    <SSLInfo>
        <Enabled>true</Enabled>
        # Enable two-way TLS.
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <IgnoreValidationErrors>false</IgnoreValidationErrors>
        <KeyAlias>ks-alias</KeyAlias>
        <KeyStore>ref://ks-ref</KeyStore>
        <TrustStore>ref://ts-ref</TrustStore>
    </SSLInfo>
    <PropagateTLSInformation>
        <ConnectionProperties>true</ConnectionProperties>
        <ClientProperties>true</ClientProperties>
    </PropagateTLSInformation>
</VirtualHost>

如果您要传递 JSON 正文,请将属性设置为:

  "propagateTLSInformation" : {
    "connectionProperties" : true,
    "clientProperties" : true
  }

设置标头大小限制

在虚拟主机上启用 TLS 信息捕获功能后,Edge 会使用 HTTP 标头传递该信息。因此,您必须根据自己使用的是 Edge for Cloud 还是 Edge for Private Cloud,确保标头大小限制设置得当:

  • Edge for the Cloud:Apigee 会相应地设置标头大小。
  • Edge Private Cloud:功能不可用。

访问 API 代理中的流变量

在 API 代理中,您可以访问和检查 TLS 流变量。 例如,您可以使用 AssignMessage 政策访问它们,也可以使用 JavaScript 政策在 JavaScript 中访问它们。

您还可以在代理或目标流的 <Condition> 元素中或在 <Step><RouteRule> 中引用流变量。例如,您可以根据客户端的 SN 将请求路由到不同的目标。

如需了解详情,请参阅: