您正在查看 Apigee Edge 文档。
前往
Apigee X 文档。 info
Edge 上的虚拟主机定义了公开 API 代理的网域和端口,以及按 扩展名,应用用于访问 API 代理的网址。
虚拟主机还定义了是使用 HTTP 协议还是 使用加密 HTTPS 协议(使用 TLS)访问 API 代理。在配置虚拟主机以使用 HTTPS 和 TLS 时,您需要在 Edge 上创建虚拟主机,并配置该虚拟主机以使用 密钥库 和 信任库。
了解详情:
创建虚拟主机所需的信息
在创建虚拟主机之前,您应掌握以下信息:
- 虚拟主机的公开域名。例如,您应该知道公开名称是
api.myCompany.com、myapi.myCompany.com等。这些信息在您创建虚拟主机时以及在您为虚拟主机创建 DNS 记录时使用。 -
**对于单向 TLS**,您需要创建一个密钥库,其中包含
以下内容:
- TLS 证书 - 由证书授权机构 (CA) 签名的证书,或 证书链(其中最后一个证书由 CA 签名)。
- 私钥 - Edge 支持的密钥大小上限为 2048 位。口令是可选的。
- 对于双向 TLS,您需要一个密钥库,还需要一个信任库来保存 客户端的证书,以及(可选)证书的 CA 链。即使证书由 CA 签名,您也需要信任库,即使 证书由 CA 签名。
如需详细了解如何创建密钥库和信任库,请参阅密钥库和 信任库。
TLS 的虚拟主机配置
如需创建虚拟主机,请创建一个定义虚拟主机的 XML 对象。
以下 XML 对象使用 <SSLInfo> 元素为通过 HTTPS 的单向 TLS 配置定义虚拟
主机:
<VirtualHost name="myTLSVHost">
<HostAliases>
<HostAlias>apiTLS.myCompany.com</HostAlias>
</HostAliases>
<Interfaces/>
<Port>9006</Port>
<OCSPStapling>off</OCSPStapling>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>ref://myTestKeystoreRef</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>
</VirtualHost>在此示例中,<Enabled> 元素设置为 true 以
启用单向 TLS,而 <KeyStore> 和 <KeyAlias> 元素指定 TLS 连接使用的密钥库
和密钥。
如需启用双向 TLS,请将 <ClientAuthEnabled> 元素设置为
true,并使用 <TrustStore>
元素指定信任库。信任库保存客户端的证书,以及(可选)证书的 CA
链。
确定如何在虚拟主机中指定密钥库和信任库名称
在上面的虚拟主机示例中,您使用引用指定了密钥库。 引用是一个包含密钥库名称的变量,而不是直接指定密钥库名称。
使用引用的优势在于,您可以更改引用的值以更改 虚拟主机使用的密钥库,更改的原因通常是因为当前密钥库中的证书即将 过期。更改引用值不需要重启 Edge 路由器。
或者,您也可以在虚拟主机中使用字面量密钥库名称。但是,如果您 修改虚拟主机以更改密钥库名称,则必须重启 Edge 路由器。
使用密钥库和信任库的引用时的限制
使用密钥库和 信任库的引用时,您必须考虑以下限制:
- 仅当您支持 SNI 并在 Apigee 路由器上终止 SSL 时,才能在虚拟主机中使用密钥库和信任库引用。
- 如果您在 Apigee 路由器前面具有负载平衡器,并且您在 负载平衡器上终止 TLS,则无法在虚拟 主机中使用密钥库和信任库引用。
修改现有虚拟主机以使用密钥库和信任库的引用
Apigee 强烈建议虚拟主机使用密钥库和信任库的引用。 借助引用,您可以更改虚拟主机使用的密钥库和信任库,而无需 重启 Edge 路由器。
如果您的虚拟主机目前配置为使用密钥库或 信任库的字面量名称,您可以将其转换为使用引用。为此,请更新虚拟主机以使用 引用,然后重启 Edge 路由器。
为 Edge 4.15.07 及更早版本设置 TLS 加密套件和协议
如果您使用的是 Edge 4.15.07 及更早版本,则可以使用 <SSLInfo> 标记的 <Ciphers> 和 <Protocols> 子标记来设置虚拟主机使用的 TLS 协议和加密套件
。下表介绍了这些标记
。
例如:
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>myTestKeystore</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>myTestKeystore</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
<Ciphers>
<Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Cipher>
<Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Cipher>
</Ciphers>
<Protocols>
<Protocol>TLSv1.2</Protocol>
</Protocols>
</SSLInfo>
</SSLInfo><Cipher> 标记使用
加密套件的 Java 和 JSSE 名称。例如,对于 Java 8,请参阅
http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites。
为 Edge 4.16.01 到 4.16.09 指定 TLS 加密套件和协议
在 Edge 4.16.01 到 4.16.09 中,您可以在路由器上全局设置虚拟主机的默认加密套件和协议 。然后,这些默认值将应用于所有虚拟主机。
使用令牌指定默认协议和加密套件:
- 如需指定默认协议,请使用令牌
conf_load_balancing_load.balancing.driver.server.ssl.protocols - 如需为路由器指定默认加密套件,请使用令牌
conf_load_balancing_load.balancing.driver.server.ssl.ciphers
conf_load_balancing_load.balancing.driver.server.ssl.protocols 令牌
的默认值为:
conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
此设置指定路由器支持 TLS 1.0、1.1 和 1.2 版。为令牌指定以 空格分隔的值列表。
conf_load_balancing_load.balancing.driver.server.ssl.ciphers 令牌
的默认值为:
conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES
此设置指定:
- 密钥长度必须为 128 位或更长 (
HIGH)。 - 排除没有身份验证的加密套件 (
!aNULL) - 排除使用 MD5 的加密套件 (
!MD5) - 排除使用 DH(包括匿名 DH、临时 DH 和固定 DH)和
三重 DES (
!DH+3DES) - 排除使用 RSA 密钥交换和三重 DES 的加密套件 (
!RSA+3DES)
如需了解此令牌允许的语法和值,请参阅 OpenSSL 加密套件。 请注意,此令牌使用 OpenSSL 加密套件名称(例如 AES128-SHA256),而不是 Java/JSSE 加密套件名称(例如 TLS_RSA_WITH_AES_128_CBC_SHA256)。
如需为路由器设置令牌,请执行以下操作:
- 修改
/opt/apigee/customer/application/router.properties文件。如果该文件不存在,请创建它。 - 设置
conf_load_balancing_load.balancing.driver.server.ssl.ciphers令牌。例如,如需仅指定 TLSv1.2 并排除使用预共享密钥的加密套件, 请添加!PSK:conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2 conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES:!PSK
- 确保
router.properties文件归 apigee 所有:chown apigee:apigee /opt/apigee/customer/application/router.properties
- 重启 Edge 路由器:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- 检查令牌的值:
/opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers
为 Edge 4.17.01 及更高版本设置 TLS 虚拟主机参数
如果您使用的是 Edge 4.17.01 及更高版本,则可以使用 <Properties> 子标记
<VirtualHost>
为单个
虚拟主机设置一些 TLS 属性,例如 TLS 协议和加密套件。虚拟主机属性参考介绍了这些标记。
例如:
<VirtualHost name="myTLSVHost">
<HostAliases>
<HostAlias>apiTLS.myCompany.com</HostAlias>
</HostAliases>
<Interfaces/>
<Port>9006</Port>
<OCSPStapling>off</OCSPStapling>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>ref://myTestKeystoreRef</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>
<Properties>
<Property name="proxy_read_timeout">50</Property>
<Property name="keepalive_timeout">300</Property>
<Property name="proxy_request_buffering">off</Property>
<Property name="proxy_buffering">off</Property>
<Property name="ssl_protocols">TLSv1.2 TLSv1.1</Property>
<Property name="ssl_ciphers">HIGH:!aNULL:!MD5:!DH+3DES:!kEDH</Property>
</Properties>
</VirtualHost>如需了解 ssl_ciphers 令牌允许的语法和值,请参阅 OpenSSL 加密套件。
请注意,此令牌使用 OpenSSL 加密套件名称(例如 AES128-SHA256),而不是
Java/JSSE 加密套件名称(例如 TLS_RSA_WITH_AES_128_CBC_SHA256)。
创建使用 HTTPS 的虚拟主机
此示例使用引用为虚拟主机指定密钥库。使用 引用可让您更改密钥库,而无需重启路由器。
请按照以下步骤创建虚拟主机:
- 按照密钥库和 信任库中所述的步骤创建并配置名为 myTestKeystore 的密钥库。确保密钥库对证书和私钥使用别名 myKeyAlias 。
-
使用以下 POST API 调用创建名为 keystoreref 的引用 ,指向您在上面创建的密钥库:
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \ -d '<ResourceReference name="keystoreref"> <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/keystoreref -u uname:password 使用 Create a Virtual Host API 创建虚拟主机,其中
<ms-IP>是管理服务器节点的 IP 地址 或域名。请务必指定正确的密钥库引用和密钥别名:
curl -X POST -H "Content-Type:application/xml" \ http://<ms-IP>:8080/v1/o/{org_name}/environments/{env_name}/virtualhosts \ -d '<VirtualHost name="newTLSTrustStore2"> <HostAliases> <HostAlias>apiTLS.myCompany.com</HostAlias> </HostAliases> <Interfaces/> <Port>9005</Port> <OCSPStapling>off</OCSPStapling> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://keystoreref</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo> </VirtualHost>' \ -u email:password- 为与主机别名匹配的虚拟主机创建 DNS 记录。
如果您有任何现有 API 代理,请将虚拟主机添加到
<HTTPConnection>元素在 ProxyEndpoint。虚拟主机会自动添加到所有新的 API 代理中。请参阅 更新 API 代理(创建虚拟主机后)(位于 关于虚拟主机中)。
更新 API 代理以使用虚拟主机并为主机 别名创建 DNS 记录后,您可以按如下所示访问 API 代理:
https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}例如:
https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282
创建和修改对密钥库或信任库的引用
您可以选择将虚拟主机配置为改用对密钥库或 信任库的引用。使用引用的优势在于,您可以更新引用以 指向其他密钥库或信任库,从而更新 TLS 证书,而无需重启 路由器。
例如,下方所示为使用对密钥库的引用的虚拟主机:
<VirtualHost name="myTLSVHost">
<HostAliases>
<HostAlias>apiTLS.myCompany.com</HostAlias>
</HostAliases>
<Interfaces/>
<Port>9006</Port>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>ref://keystoreref</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>
</VirtualHost>使用以下 POST API 调用创建名为 keystoreref 的引用:
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
-d '<ResourceReference name="keystoreref">
<Refers>myTestKeystore</Refers>
<ResourceType>KeyStore</ResourceType>
</ResourceReference>'
-u email:password
此引用指定密钥库的名称及其类型。
使用以下 GET API 调用来查看引用:
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
以后如需将引用更改为指向其他密钥库,从而确保别名具有 相同的名称,请使用以下 PUT 调用:
curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
-d '<ResourceReference name="keystoreref">
<Refers>myNewKeystore</Refers>
<ResourceType>KeyStore</ResourceType>
</ResourceReference>'
-u email:password