配置从边缘到后端的 TLS(Cloud 和私有云)

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

API 代理的作用是将公开可用的端点映射到您的后端服务。 虚拟主机定义了面向公众的 API 代理向应用公开的方式。对于 例如,虚拟主机会确定是否可以使用 TLS 访问 API 代理。当您 配置 API 代理,修改其 ProxyEndpoint 定义,以配置其 用途。

TargetEndpoint 是 ProxyEndpoint 的出站等效项。TargetEndpoint 函数 作为 HTTP 客户端从 Edge 传递到后端服务。创建 API 代理时,您可以 可以使用零个或多个 Target 端点

了解详情

配置 TargetEndpoint 或 TargetServer

要配置 TargetEndpoint,请修改用于定义 TargetEndpoint 的 XML 对象。您可以 通过在 API 代理,或在 Edge 管理界面中对其进行修改。

如需使用 Edge 管理界面修改 TargetEndpoint,请执行以下操作:

  1. 访问 https://enterprise.apigee.com,登录 Edge 管理界面。
  2. 选择要更新的 API 代理的名称。
  3. 选择开发标签页。
  4. 目标端点下,选择默认
  5. 在代码区域中,系统会显示 TargetEndpoint 定义,类似于以下内容:
    <TargetEndpoint name="default">
      <Description/>
      <FaultRules/>
      <Flows/>
      <PreFlow name="PreFlow">
        <Request/>
        <Response/>
      </PreFlow>
      <PostFlow name="PostFlow">
        <Request/>
        <Response/>
      </PostFlow>
      <HTTPTargetConnection>
        <Properties/>
        <SSLInfo>
          <Enabled>true</Enabled>
          <TrustStore>ref://myTrustStoreRef</TrustStore>
        </SSLInfo>
        <URL>https://mocktarget.apigee.net</URL>
      </HTTPTargetConnection>
    </TargetEndpoint>
  6. 按照下文中的说明配置信任库 关于后端 TLS 配置
  7. 做出更改并保存代理。如果 API 代理已部署,请保存 并使用新设置重新部署

请注意,TargetEndpoint 定义包含 name 属性。您可以使用 name 属性 来配置 API 代理的 ProxyEndpoint 定义, TargetEndpoint。 如需了解详情,请参阅 API 代理配置参考文档

TargetEndpoint 可以配置为引用 TargetServer,而不是显式 目标网址。TargetServer 配置将具体的端点网址与 TargetEndpoint 配置执行操作。TargetServer 用于支持负载均衡和故障切换 跨多个后端服务器实例。

下面显示了一个 TargetServer 定义示例:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>80</Port>
  <IsEnabled>true</IsEnabled>
</TargetServer> 

<HTTPTargetConnection> 中通过名称引用 TargetServer 元素。 您可以配置一个或多个已命名的 TargetServer,如下所示。

<TargetEndpoint name="default">
  ...
  <HTTPTargetConnection>
    <LoadBalancer>
      <Server name="target1" />
      <Server name="target2" />
    </LoadBalancer>
    <Path>/test</Path>
  </HTTPTargetConnection>
  ...
</TargetEndpoint>

请参阅负载均衡 后端服务器了解详情。

关于后端的 TLS 配置

在配置对后端的 TLS 访问之前,您应该了解两个重要事项 分:

  1. 默认情况下,Edge 不会验证后端证书。您必须创建信任库才能进行配置 用于验证证书的 Edge。
  2. 使用引用来指定 Edge 使用的密钥库或信任库。

下文介绍了这两种注意事项。

定义信任库以启用证书验证

通过 TargetEndpoint 或 TargetServer 发出 TLS 请求时,Edge 不会 默认情况下会验证从后端服务器收到的 TLS 证书。 这意味着 Edge 不会验证以下内容:

  • 该证书已由受信任的 CA 签名。
  • 该证书尚未过期。
  • 该证书提供一个通用名称。如果存在通用名称,Edge 不会验证 通用名称与网址中指定的主机名相匹配。

如需配置 Edge 以验证后端证书,您必须执行以下操作:

  1. 在 Edge 上创建信任库。
  2. 将服务器的证书或证书链上传到信任库。 如果服务器证书是由第三方签发的,那么您需要将 完整的证书链(包括根 CA 证书)连接到信任库。 没有隐式信任的 CA。
  3. 将信任库添加到 TargetEndpoint 或 TargetServer 定义中。

如需了解详情,请参阅密钥库和信任库

例如:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

使用引用 密钥库或信任库

以下示例展示了如何配置 TargetEndpoint 或 TargetServer 支持传输层安全协议 (TLS)。在配置 TLS 时,您需要指定 TargetEndpoint 或 TargetServer 定义。

Apigee 强烈建议您使用指向密钥库的引用,并且 信任库。使用引用的优势 你只需更新引用,使其指向一个不同的密钥库或信任库 更新 TLS 证书。

对以下位置中的密钥库和信任存储区的引用 Target Endpoints 或 TargetServer 定义的工作方式与 (对于虚拟主机)。

转换 TargetEndpoint 或 TargetServer 以使用引用

您可能已有 TargetEndpoint 或 TargetServer 定义 使用密钥库和信任库的文字名称。要转换 TargetEndpoint 或 TargetServer 定义使用引用:

  1. 更新 TargetEndpoint 或 TargetServer 定义以使用引用。
  2. 重启边缘消息处理器: <ph type="x-smartling-placeholder">
      </ph>
    • 对于公有云客户,请联系 Apigee Edge 支持团队,以重启消息处理器。
    • 对于 Private Cloud 客户,请重启 Edge Message Processors One 。
  3. 确认您的 TargetEndpoint 或 TargetServer 工作正常。

配置到后端的单向 TLS 服务器

使用 TargetEndpoint 定义时,配置从边缘 (TLS 客户端) 进行的单向 TLS 访问 而无需在 Edge 上进行任何额外配置。时间是 直到后端服务器正确配置 TLS。

您只需确保下面所示的 <URL> 元素 TargetEndpoint 定义通过 HTTPS 协议引用后端服务,并且 启用 TLS:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

如果您使用 TargetServer 定义后端服务,请启用 TLS 在 TargetServer 定义中:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
  </SSLInfo> 
</TargetServer> 

但是,如果您希望 Edge 验证后端证书,则必须创建信任库 包含后端证书或证书链然后,在 TargetEndpoint 定义启动以下事件:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

或者,在 TargetServer 定义中:

<TargetServer name="target1">
  <Host>mockserver.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
    <TrustStore>ref://myTrustStoreRef</TrustStore>
  </SSLInfo> 
</TargetServer>

如需配置单向 TLS,请执行以下操作:

  1. 如果要验证后端证书,请在 Edge 上创建信任库,然后上传 后端证书或 CA 链,如 密钥库和信任存储区。 在本例中,如果您必须创建一个信任库,请将其命名为 myTrustStore 进行身份验证。
  2. 如果您已创建信任库,请使用以下 POST API 调用来创建 指向您创建的信任库的名为 myTrustStoreRef 的引用 上方:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>' -u email:password
    
  3. 使用 Edge 管理界面更新 API 代理的 TargetEndpoint 定义(或者, 如果您在 XML 中定义 API 代理,请修改代理的 XML 文件): <ph type="x-smartling-placeholder">
      </ph>
    1. 访问 https://enterprise.apigee.com,登录 Edge 管理界面。
    2. 在 Edge 管理界面菜单中,选择 API
    3. 选择要更新的 API 代理的名称。
    4. 选择开发标签页。
    5. 目标端点下,选择默认
    6. 在代码区域中,将 <HTTPTargetConnection> 元素修改为 添加 <SSLInfo> 元素。 请务必指定正确的信任库引用,并将 <Enabled> 设为 true:
      <TargetEndpoint name="default">
        …
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        …
      </TargetEndpoint>
    7. 保存 API 代理。如果 API 代理已部署,则保存此代理后,系统会使用 新设置。

配置到后端的双向 TLS 服务器

如果您想支持边缘(TLS 客户端)和后端服务器(TLS)之间的双向 TLS 服务器):

  • 在 Edge 上创建一个密钥库,并上传 Edge 证书和私钥。
  • 如果要验证后端证书,请在 Edge 上创建一个信任库,其中包含 证书和 CA 链。
  • 更新引用后端服务器的任何 API 代理的 TargetEndpoint 以进行配置 TLS 访问。

使用密钥别名指定密钥库证书

您可以在同一个密钥库中定义多个证书,每个证书都有自己的别名。 默认情况下,Edge 使用密钥库中定义的第一个证书。

(可选)您可以将 Edge 配置为使用 <KeyAlias> 属性指定的证书。 这样,您就可以为多个证书定义一个密钥库,然后 请在 TargetServer 定义中选择所需的服务器。如果 Edge 找不到具有别名的证书 与 <KeyAlias> 匹配,则默认操作是选择 密钥库中的第一个证书

面向公有云的 Edge 用户必须与 Apigee Edge 支持联系才能启用此功能。

配置双向 TLS

如需配置双向 TLS,请执行以下操作:

  1. 在 Edge 上创建密钥库,并按照以下程序上传证书和私钥 密钥库和信任库中所述。 在本例中,我们创建一个名为 myTestKeystore 的密钥库,该密钥库使用 证书和私钥的 myKey 的别名。
  2. 使用以下 POST API 调用创建参考 名为 myKeyStoreRef 存储在上面创建的密钥库:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myKeyStoreRef">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    

    引用将密钥库的名称和引用类型指定为 KeyStore

    使用以下 GET API 调用来查看引用:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/myKeyStoreRef /
    -u email:password
    
  3. 如果要验证后端证书,请在 Edge 上创建一个信任库,然后上传证书和 CA 具体如以下部分所述:密钥库和信任库。 在本例中,如果您必须创建一个名为 myTrustStore 的信任库。
  4. 如果您已创建信任库,请使用以下 POST API 调用来创建 指向您创建的信任库的名为 myTrustStoreRef 的引用 上方:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    
  5. 使用 Edge 管理界面更新 API 代理的 TargetEndpoint 定义(或者, 如果您在 XML 中定义 API 代理,请修改代理的 XML 文件): <ph type="x-smartling-placeholder">
      </ph>
    1. 访问 https://enterprise.apigee.com,登录 Edge 管理界面。
    2. 在 Edge 管理界面菜单中,选择 API
    3. 选择要更新的 API 代理的名称。
    4. 选择开发标签页。
    5. 目标端点下,选择默认
    6. 在代码区域中,将 <HTTPTargetConnection> 元素修改为 添加<SSLInfo> 元素。请务必指定正确的密钥库和密钥别名,并同时设置 <Enabled><ClientAuthEnabled> 元素设为 true:
      <TargetEndpoint name="default">
        ...
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>true</ClientAuthEnabled>
            <KeyStore>ref://myKeyStoreRef</KeyStore>
            <KeyAlias>myKey</KeyAlias>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        ...
      </TargetEndpoint>
    7. 保存 API 代理。如果 API 代理已部署,则保存此代理后,系统会使用 新设置。

如需详细了解 <TargetEndpoint> 中提供的选项,包括如何使用变量 提供 TargetEndpoint <SSLInfo> 值,请参阅 API 代理配置参考文档

启用 SNI

Edge 支持使用消息处理器中的服务器名称指示 (SNI) 来发送 Apigee Edge 中用于云端部署和私有云部署的端点。

为了让私有云的 Edge 向后兼容您现有的目标后端, Apigee 默认停用 SNI。如果您的目标后端配置为支持 SNI, 就可以启用此功能如需了解详情,请参阅将 SNI 与 Edge 搭配使用