<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
Edge 上的虚拟主机定义了 API 代理在哪些网域和端口上公开,以及 扩展程序,即应用程序用于访问 API 代理的网址。
虚拟主机还可定义 API 代理是使用 HTTP 协议还是 使用 TLS 加密的 HTTPS 协议在配置虚拟主机以使用 HTTPS 和 TLS,请在 Edge 上创建一个虚拟主机,并将虚拟主机配置为使用密钥库 和 信任库。
了解详情:
创建虚拟主机的前提条件
在创建虚拟主机之前,您应具备以下信息:
- 虚拟主机的公开域名。例如,您应该知道
面向公众的名称是“
api.myCompany.com
”、“myapi.myCompany.com
”等。该信息 在创建虚拟主机时、为本地主机创建 DNS 记录时使用, 虚拟主机。 -
对于单向 TLS,您需要创建一个密钥库,其中密钥库包含
以下:
<ph type="x-smartling-placeholder">
- </ph>
- TLS 证书 - 由证书授权机构 (CA) 签署的证书,或 证书链,其中最后一个证书由 CA 签名。
- 私钥 - Edge 支持的密钥大小最高为 2048 位。同步密码是可选的。
- 对于双向 TLS,您需要一个密钥库,并需要一个信任库来保存 证书的 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(可选)
。
决定如何在虚拟主机中指定密钥库和信任库名称
在上面的虚拟主机示例中,您使用 reference 指定了密钥库。答 reference 是一个包含密钥库名称的变量,而不是指定 密钥库名称。
使用引用的优势在于 虚拟主机使用的密钥库,通常是因为当前密钥库中的证书是 即将过期。更改引用的值不需要重启 边缘路由器
或者,您也可以在虚拟主机中使用字面量密钥库名称。但如果您 修改虚拟主机以更改密钥库名称,则必须重启边缘路由器。
使用对密钥库和信任库的引用的限制
在使用对密钥库和 信任库:
- 如果您支持 SNI 和 在 Apigee 路由器上终止 SSL
- 如果您在 Apigee 路由器前面有一个负载平衡器,并且终止了 则您无法在虚拟环境中使用密钥库和信任库引用 主机。
修改现有的虚拟主机以使用对密钥库和信任库的引用
Apigee 强烈建议虚拟主机使用对密钥库和信任库的引用。 通过引用,您可以更改虚拟主机使用的密钥库和信任库,而无需 必须重启边缘路由器
如果您的虚拟主机当前配置为使用密钥库的文字名称,或者 可以将其转换为使用引用。为此,请更新该虚拟主机以使用 然后重启边缘路由器。
为 Edge 4.15.07 及更低版本设置 TLS 加密方式和协议
如果您使用的是 Edge 4.15.07 及更低版本,请设置 TLS 协议和加密方式
(通过使用<Ciphers>
<Protocols>
<SSLInfo>
标记之间。这些标签
如下表所示。
例如:
<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 并排除使用预共享密钥的加密套件,请执行以下操作: add!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
- 重启边缘路由器:
/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>
子标记(例如 TLS 协议和加密)
<VirtualHost>
标记前面。虚拟主机属性参考中介绍了这些标记。
例如:
<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
使用 创建 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