为 API BaaS 配置 TLS

适用于私有云的 Edge v. 4.17.05

TLS(传输层安全协议,其前身是 SSL)是一种标准的安全技术 可确保在 API 环境中进行安全的加密消息传递。您可以配置 TLS 。

下图显示了具有单个 BaaS 门户的 API BaaS 的典型部署图 和三个 API BaaS 堆栈节点。

开发者使用浏览器向门户发出请求。默认情况下,这些请求使用 协议。

此部署在门户和堆栈节点之间添加负载平衡器。在本课中, 之后,该门户会向负载平衡器发送 HTTP 请求,然后负载平衡器 将请求转发到堆栈节点之一。这是推荐的部署 为生产系统运行环境

TLS 配置选项

为 API BaaS 配置 TLS 时,您有以下几种选择:

  • 在门户和栈节点的负载平衡器上配置 TLS

    在此配置中,开发者使用 HTTPS 协议访问门户,而门户 浏览器会使用 HTTPS 通过 进行负载均衡。负载平衡器使用 HTTP 访问堆栈节点。
  • 在门户、负载平衡器和堆栈节点上配置 TLS

    为了提高安全性,请将负载平衡器配置为使用 TLS 访问堆栈节点。
  • 在门户和单个堆栈节点上配置 TLS

    在小型环境(例如测试或开发环境)中,您可能只有一个 单个堆栈节点,这意味着无需添加负载平衡器。在此配置中 在门户和堆栈节点上配置 TLS。
  • 在门户的负载平衡器上配置 TLS

    上文未显示的一个选项是在门户节点前面使用负载平衡器。在该部分中, 您可以在负载平衡器上配置 TLS 负载平衡器和门户之间的连接。

确保 TLS 端口已打开

以下步骤将在默认门户端口 9000 和堆栈节点 8080 上配置 TLS。 不过,您可以根据需要更改此端口。

无论您使用哪个端口,都必须确保该端口在节点上处于打开状态。对于 例如,您可以使用以下命令打开端口 8443:

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT --verbose

在 API BaaS 堆栈上配置 TLS

对于 API BaaS 堆栈,TLS 默认处于停用状态。然后,您可以通过以下方式通过 HTTP 访问 BaaS API: 使用堆栈节点的 IP 地址或 DNS 名称和端口 8080。例如:

http://stack_IP:8080

或者,您也可以为 BaaS API 配置 TLS 访问,以便 表单:

https://stack_IP:8080

在此示例中,您将 TLS 访问配置为使用端口 8080。但端口 8080 不是必需的 - 您可以将堆栈配置为使用其他端口。唯一的要求是防火墙 允许通过指定端口的流量。

堆栈在单个端口上仅支持一种类型的请求(HTTP 或 HTTPS)。因此, 如果您在端口 8080 上配置 HTTPS 访问,则无法使用 HTTP 访问端口 8080。如果您 将堆栈配置为使用端口 8443 与 HTTPS,则堆栈将不再通过端口进行监听 8080。

请按照以下步骤配置对堆栈的 TLS 访问:

  1. 生成包含 TLS 证书和私钥的密钥库 JKS 文件。有关 请参阅为 Edge On 配置 TLS/SSL 场所
    注意:请确保密钥库和密钥上的密码相同。
  2. 将密钥库 JKS 文件复制到堆栈节点上的某个目录中,例如 /opt/apigee/customer/application。 该目录必须可供“apigee”访问用户。
  3. 将 JKS 文件的所有权更改为“apigee”用户:
    >chown apigee:apigee /opt/apigee/customer/application/keystore.jks

    其中 keystore.jks 是其名称 密钥存储区文件的名称
  4. 修改 /opt/apigee/customer/application/usergrid.properties 文件来设置以下属性,包括 JKS 文件的路径和密码 密钥库和密钥如果该文件不存在,请创建:
    tomcat-server_scheme=https
    tomcat-server_secure=true
    tomcat-server_ssl.enabled=true
    tomcat-server_keystore.type=JKS
    tomcat-server_keystore.file=/opt/apigee/customer/application/keystore.jks
    tomcat-server_keystore.password=password
    tomcat-server_keyalias=keystore_alias
    tomcat-server_clientauth.enabled=false
    tomcat-server_ssl.protocols=TLSv1、TLSv1.1、TLSv1.2
    # 默认情况下,TLS 访问使用端口 8080。
    # 请使用此属性指定其他端口。
    # tomcat-server_port=8080


    警告password 值必须为明文。 因此,您应防止 usergrid.properties 未经授权 访问权限。

    使用 tomcat-server_keyalias 属性指定密钥库别名。请在创建密钥时设置密钥别名。 例如,您可以在 keytool 命令中使用 -alias 选项进行设置。

    使用 tomcat-server_ssl.protocols 来设置堆栈支持的 TLS 协议。有关 Java 8 支持的协议列表, 请参阅 http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename
  5. 配置堆栈节点:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid 配置
  6. 重启 BaaS 堆栈:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  7. 使用以下命令在堆栈节点上运行以下 c网址 命令,确认 TLS 正常运行: HTTPS:
    >curl -k https://localhost:8080/status -v

    如果 TLS 配置正确,您应该会看到包含状态信息的响应。

    如果您通过 8080 之外的端口配置了 TLS 访问,请修改上述命令以使用 正确的端口。
  8. 在所有堆栈节点上重复上述步骤。
  9. 如果您在堆栈节点前面有一个负载平衡器,请配置 负载平衡器通过 HTTPS 向堆栈节点发出请求。请参阅 负载平衡器。

    如果 Portal 向 Stack 发出直接请求,请将该 Portal 配置为 按照下一部分所述,通过 HTTPS 访问堆栈。
  10. 请按照以下“在堆栈或门户上为 TLS 配置 API BaaS 堆栈节点”中的步骤进行操作 确保堆栈节点在生成用户 响应。

正在配置 门户,通过 TLS 访问 Stack

在浏览器中运行的 BaaS 门户通过对 BaaS 堆栈进行 API 调用来正常运行。如果您 配置 BaaS 堆栈以使用 TLS,那么您还必须配置门户以发出这些调用 HTTPS 协议

API BaaS 安装通常配置为:

  • 在门户节点和栈节点之间使用负载平衡器

    将负载平衡器配置为通过 HTTPS 向堆栈节点发出请求。请参阅 文档。

    在此配置中,门户可以通过 HTTP 或 HTTPS 访问负载平衡器,具体取决于 负载平衡器的配置方式如果负载平衡器使用 TLS,请按照以下步骤进行操作 配置门户以向 HTTPS 负载平衡器发出请求。
  • 让 Portal 直接向 Stack 发出请求

    如下所述,配置门户以通过 HTTPS 访问堆栈。

请按照以下步骤配置 API BaaS 门户,以通过 HTTPS 进行 API 调用:

  1. 如上所述,在 BaaS 堆栈上配置 TLS 访问, 按照负载平衡器的文档中的说明堆叠节点。
  2. 修改 /opt/apigee/customer/application/portal.properties 设置以下属性。如果该文件不存在,请创建:
    baas.portal.config.overrideUrl=https://stackIP:port

    将 API 堆栈节点的 IP 地址或 DNS 名称以及端口指定为此属性的值。 或负载平衡器(如果您的前端有负载平衡器的话) API BaaS 堆栈节点。
  3. 配置门户节点:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. 使用以下命令重启门户:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  5. 如果您在配置对堆栈的 TLS 访问权限时使用了自签名证书 上方,那么您的浏览器可能不允许从门户向 Stack 发出请求。如果您看到 在浏览器中出现不允许 HTTPS 访问堆栈的错误,请请求以下 网址,并添加安全例外情况以允许访问:
    https://stackIP:port/status

    指定 API 栈节点或负载平衡器的 IP 地址或 DNS 名称以及端口。

在 API BaaS 门户上配置 TLS

默认情况下,用户通过端口 9000 上的未加密 HTTP 请求来访问门户网站。 门户服务器。您可以将该门户配置为使用 HTTPS 对发送到和发自 。

默认情况下,您可以使用门户的 IP 地址或 DNS 名称通过 HTTP 访问门户 节点和端口 9000例如:

http://portal_IP:9000

或者,您也可以为门户配置 TLS 访问,以便在 表单:

https://portal_IP:9443

在此示例中,您将 TLS 访问配置为使用端口 9443。但端口 9443 不是必需的 - 您可以将门户网站配置为使用其他端口。

门户只能通过单个端口支持一种类型的请求(HTTP 或 HTTPS)。因此, 如果您在端口 9000 上配置 HTTPS 访问,则无法使用 HTTP 访问端口 9000。如果您 将门户配置为通过 HTTPS 使用端口 9443,则门户将不再通过端口进行监听 9,000。

要为门户配置 TLS,请执行以下操作:

  1. 创建 PEM 格式的密钥文件和证书文件。
    注意:请确保密钥或证书上没有密码/口令。
  2. 将 PEM 文件复制到门户节点上的某个目录,例如 /opt/apigee/customer/application。 该目录必须可供“apigee”访问用户。
  3. 将 PEM 文件的所有权更改为“apigee”用户:
    >chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. 修改 /opt/apigee/customer/application/portal.properties 文件来设置以下属性。如果该文件不存在,请创建它:
    baas.portal.ssl=on
    baas.portal.ssl.certificate=/opt/apigee/customer/application/defaultcert.pem
    baas.portal.ssl.key=/opt/apigee/customer/application/defaultkey.pem
    baas.portal.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
    # 默认情况下,TLS 访问使用端口 9000。
    # 请使用此属性指定其他端口。
    # baas.portal.listen=9000


    使用 baas.portal.ssl.protocols 来设置门户支持的 TLS 协议。有关支持的协议的列表,请参阅 Nginx 定义的 SSL 协议名称列表:http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols
  5. 配置门户节点:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. 重启门户:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  7. 请按照以下“在堆栈或门户上为 TLS 配置 API BaaS 堆栈节点”中的步骤进行操作 以确保 Stack 节点具有针对门户的正确 TLS 网址。

为传输层安全协议 (TLS) 上的 堆栈或传送门

如果您在堆栈节点或门户节点前添加了负载平衡器,或者启用了 TLS 所以你必须使用正确的网址来配置节点 访问堆栈和门户。例如,在以下情况下,堆栈节点需要此信息:

  • 在 BaaS API 请求的响应中包含网址。
  • 在重置密码或发送其他电子邮件模板时,在电子邮件模板中添加链接。 通知。
  • 将用户重定向到特定的门户页面。

如果您在堆栈节点前使用负载平衡器,或在堆栈节点上配置 TLS,请设置 /opt/apigee/customer/application/usergrid.properties 中的以下属性:

usergrid-deployment_usergrid.api.url.base=http://localhost:8080

http://localhost:8080 替换为加载网址的网址 进行负载均衡。如果负载平衡器配置为使用 TLS,请使用 HTTPS 协议。仅您本人 如果您使用的是非标准端口(即端口以外的其他端口),则需要包含该端口。 HTTP 为 80,HTTPS 为端口 443。

如果满足以下条件,您还必须在 /opt/apigee/customer/application/portal.properties 中设置以下属性: 您在堆栈节点前使用负载平衡器:

baas.portal.config.overrideUrl=http://localhost:8080

http://localhost:8080 替换为 进行负载均衡

如果您在门户节点前面使用负载平衡器,或在堆栈节点上配置 TLS,请设置 usergrid.properties 中的以下属性:

usergrid-deployment_portal.url=http://localhost:9000

http://localhost:9000 替换为 进行负载均衡器如果负载平衡器配置为使用 TLS,请使用 HTTPS 协议。您 只有在您使用非标准端口(也就是 HTTP 端口 80 和 HTTPS 端口 443

修改 usergrid.properties 后:

  1. 配置堆栈节点:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid 配置
  2. 重启 BaaS 堆栈:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  3. 如果您修改了 portal.properties,请配置 门户节点:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. 重启 BaaS 门户:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart