您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档。 信息
API 代理的作用是将公开可用的端点映射到您的后端服务。虚拟主机定义了向应用公开 API 代理的方式。例如,虚拟主机确定是否可以使用 TLS 访问 API 代理。配置 API 代理时,请修改其 ProxyEndpoint 定义以配置其使用的虚拟主机。
TargetEndpoint 是 ProxyEndpoint 的出站等效项。TargetEndpoint 充当从边缘到后端服务的 HTTP 客户端。创建 API 代理时,您可以将其配置为使用零个或多个 TargetEndpoint。
了解详情:
配置 TargetEndpoint 或 TargetServer
要配置 TargetEndpoint,请修改定义 TargetEndpoint 的 XML 对象。您可以通过修改在 API 代理中定义 TargetEndpoint 的 XML 文件来修改 TargetEndpoint,或在边缘管理界面中进行修改。
如需使用边缘管理界面修改 TargetEndpoint,请执行以下操作:
- 访问 https://enterprise.apigee.com,登录 Edge 管理界面。
- 选择要更新的 API 代理的名称。
- 选择开发标签页。
- 在目标端点下,选择默认。
- 在代码区域中,会显示 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>
- 按照下方关于后端的 TLS 配置中的说明配置信任库。
- 进行更改并保存代理。如果 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>
在 TargetEndpoint 定义的 <HTTPTargetConnection>
元素中按名称引用 TargetServer。您可以配置一个或多个指定的 TargetServer,如下所示。
<TargetEndpoint name="default"> ... <HTTPTargetConnection> <LoadBalancer> <Server name="target1" /> <Server name="target2" /> </LoadBalancer> <Path>/test</Path> </HTTPTargetConnection> ... </TargetEndpoint>
如需了解详情,请参阅跨后端服务器实现负载均衡。
关于后端的 TLS 配置
在配置对后端的 TLS 访问之前,您应该了解两个要点:
- 默认情况下,Edge 不会验证后端证书。您必须创建信任库才能配置 Edge 以验证证书。
- 使用引用来指定 Edge 使用的密钥库或信任库。
下文介绍了这两种注意事项。
定义信任库以启用证书验证
通过 TargetEndpoint 或 TargetServer 发出 TLS 请求时,默认情况下,Edge 不会 验证从后端服务器收到的 TLS 证书。这意味着 Edge 不会验证:
- 证书由受信任的 CA 签署。
- 证书尚未过期。
- 证书提供通用名称。如果存在通用名称,Edge 不会验证该通用名称是否与网址中指定的主机名匹配。
如需配置 Edge 以验证后端证书,您必须执行以下操作:
- 在 Edge 上创建信任库。
- 将服务器的证书或证书链上传到信任库。 如果服务器证书由第三方签名,则您需要将完整的证书链(包括根 CA 证书)上传到信任库。没有隐式可信 CA。
- 将信任库添加到 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 强烈建议您在 TargetEndpoint 或 TargetServer 定义中使用对密钥库和信任库的引用。使用引用的优势在于,您只需更新引用以指向其他密钥库或信任库,即可更新 TLS 证书。
在 Target Endpoints 或 TargetServer 定义中引用密钥库和信任库的方式与虚拟主机相同。
将 TargetEndpoint 或 TargetServer 转换为使用引用
您可能已有使用密钥库和信任库的文字名称的 TargetEndpoint 或 TargetServer 定义。如需将 TargetEndpoint 或 TargetServer 定义转换为使用引用,请执行以下操作:
- 更新 TargetEndpoint 或 TargetServer 定义以使用引用。
- 重启边缘消息处理器:
- 对于公有云客户,请联系 Apigee Edge 支持团队以重启消息处理器。
- 对于私有云客户,请逐个重启边缘消息处理器。
- 确认您的 TargetEndpoint 或 TargetServer 正常运行。
配置后端服务器的单向 TLS
使用 TargetEndpoint 定义时,配置从边缘(TLS 客户端)到后端服务器(TLS 服务器)的单向 TLS 访问不需要在 Edge 上进行任何额外配置。正确配置 TLS 取决于后端服务器。
您只需确保 TargetEndpoint 定义中的 <URL>
元素通过 HTTPS 协议引用后端服务,并启用 TLS:
<TargetEndpoint name="default"> … <HTTPTargetConnection> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> <URL>https://myservice.com</URL> </HTTPTargetConnection> … </TargetEndpoint>
如果您使用 TargetServer 定义后端服务,请在 TargetServer 定义中启用 TLS:
<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,请执行以下操作:
- 如果要验证后端证书,请在 Edge 上创建一个信任库,然后上传后端证书或 CA 链,如密钥库和信任库中所述。 在此示例中,您必须创建一个信任库,将其命名为 myTrustStore。
-
如果您创建了信任库,请使用以下 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
- 使用边缘管理界面更新 API 代理的 TargetEndpoint 定义(或者,如果您在 XML 中定义 API 代理,请修改代理的 XML 文件):
- 访问 https://enterprise.apigee.com,登录 Edge 管理界面。
- 在 Edge 管理界面菜单中,选择 API。
- 选择要更新的 API 代理的名称。
- 选择 Development 标签页。
- 在目标端点下,选择默认。
- 在代码区域中,修改
<HTTPTargetConnection>
元素以添加<SSLInfo>
元素。 请务必指定正确的信任库引用并将<Enabled>
设置为 true:<TargetEndpoint name="default"> … <HTTPTargetConnection> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://myservice.com</URL> </HTTPTargetConnection> … </TargetEndpoint>
- 保存 API 代理。如果 API 代理已部署,则保存该代理后,系统会使用新设置重新部署该代理。
配置到后端服务器的双向 TLS
如果要支持边缘(TLS 客户端)和后端服务器(TLS 服务器)之间的双向 TLS,请执行以下操作:
- 在 Edge 上创建一个密钥库,并上传 Edge 证书和私钥。
- 如果要验证后端证书,请在边缘上创建一个信任库,其中包含您从后端服务器收到的证书和 CA 链。
- 更新引用后端服务器的任何 API 代理的 TargetEndpoint,以配置 TLS 访问。
使用密钥别名指定密钥库证书
您可以在同一个密钥库中定义多个证书,每个证书都有自己的别名。默认情况下,Edge 使用密钥库中定义的第一个证书。
(可选)您可以将 Edge 配置为使用 <KeyAlias>
属性指定的证书。这样,您就可以为多个证书定义一个密钥库,然后选择要在 TargetServer 定义中使用的一个密钥库。如果 Edge 找不到别名与 <KeyAlias>
匹配的证书,则会使用默认操作,即选择密钥库中的第一个证书。
面向公有云的 Edge 用户必须联系 Apigee Edge 支持团队才能启用此功能。
配置双向 TLS
如需配置双向 TLS,请执行以下操作:
- 在 Edge 上创建密钥库,然后按照密钥库和信任库所述的步骤上传证书和私钥。在本例中,创建一个名为 myTestKeystore 的密钥库,该密钥库使用别名 myKey 作为证书和私钥。
-
使用以下 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
- 如果要验证后端证书,请在 Edge 上创建一个信任库,然后上传证书和 CA 链,如密钥库和信任库中所述。 在此示例中,您必须创建一个名为 myTrustStore 的信任库。
-
如果您创建了信任库,请使用以下 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
- 使用边缘管理界面更新 API 代理的 TargetEndpoint 定义(或者,如果您在 XML 中定义 API 代理,请修改代理的 XML 文件):
- 访问 https://enterprise.apigee.com,登录 Edge 管理界面。
- 在 Edge 管理界面菜单中,选择 API。
- 选择要更新的 API 代理的名称。
- 选择 Development 标签页。
- 在目标端点下,选择默认。
- 在代码区域中,修改
<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>
- 保存 API 代理。如果 API 代理已部署,则保存该代理后,系统会使用新设置重新部署该代理。
如需详细了解 <TargetEndpoint>
中的可用选项(包括使用变量提供 TargetEndpoint <SSLInfo>
值),请参阅 API 代理配置参考。
启用 SNI
Edge 支持使用消息处理器中的服务器名称指示 (SNI) 来定位 Apigee Edge 中适用于 Cloud 和私有云部署的端点。
对于适用于私有云的 Edge,为了向后兼容您现有的目标后端,Apigee 默认停用了 SNI。如果您的目标后端配置为支持 SNI,您可以启用此功能。如需了解详情,请参阅将 SNI 与 Edge 搭配使用。