为路由器和消息处理器设置 TLS 协议

在 Apigee Edge for Private Cloud 4.54.00 中,默认情况下,路由器 (Nginx) 和消息处理器 (Java 21) 会启用 TLSv1.2 和 TLSv1.3。根据您的业务需求和安全 实践,您可能需要限制允许的协议或重新启用 旧协议。本文档介绍了如何在路由器和消息处理器上为北向和南向流量配置 TLS 协议。

对于路由器,您还可以为各个虚拟主机设置协议。如需了解详情,请参阅为私有云配置对 API 的 TLS 访问。

对于消息处理器,您可以为各个 TargetEndpoint 设置协议。 如需了解详情,请参阅配置从 Edge 到后端(云和私有云)的 TLS。

在路由器上设置 TLS 协议

借助以下属性,您可以在路由器上为北向通信设置所需的 TLS 协议。

如需在路由器上设置 TLS 协议,请在 router.properties 文件中设置属性:

  1. 在编辑器中打开 router.properties 文件。如果该文件不存在,请创建它:
    vi /opt/apigee/customer/application/router.properties
  2. 根据需要设置属性:
    # Possible values are space-delimited list of: TLSv1 TLSv1.1 TLSv1.2 TLSv1.3
    conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
  3. 保存更改。
  4. 确保属性文件归 apigee 用户所有:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  5. 重启路由器:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. 检查 Nginx 文件 /opt/nginx/conf.d/0-default.conf: ,验证协议是否已正确更新:
    cat /opt/nginx/conf.d/0-default.conf

    确保 ssl_protocols 的值为 TLSv1.2。

  7. 如果您将双向 TLS 与虚拟主机搭配使用,还必须在 虚拟主机中设置 TLS 协议,如为私有云配置对 API 的 TLS 访问中所述。

在消息 处理器上设置 TLS 协议

借助以下属性,您可以在消息处理器上为南向通信设置所需的 TLS 协议。本部分还介绍了 如何使用已停用的 TLS 协议和密码。

如需在消息处理器上设置 TLS 协议,请在 message-processor.properties 文件中设置属性:

  1. 在编辑器中打开 message-processor.properties 文件。如果该文件不存在,请创建它:
    vi /opt/apigee/customer/application/message-processor.properties
  2. 使用以下语法配置属性:
    # Possible values are a comma-delimited list of TLSv1, TLSv1.1, TLSv1.2, and TLSv1.3
    conf/system.properties+https.protocols=[TLSv1][,TLSv1.1][,TLSv1.2][,TLSv1.3]
    # Possible values are a comma-delimited list of SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3
    # SSLv3 is required
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3[,TLSv1][,TLSv1.1][,TLSv1.2][,TLSv1.3]
    
    # Specify the ciphers that the Message Processor supports. (You must separate ciphers with a comma.):
    conf_message-processor-communication_local.http.ssl.ciphers=cipher[,...]

    例如:

    conf/system.properties+https.protocols=TLSv1.2
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1
    conf_message-processor-communication_local.http.ssl.ciphers=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

    如需查看相关属性的完整列表,请参阅 在路由器和消息处理器之间配置 TLS。

  3. 保存更改。
  4. 确保属性文件归 apigee 用户所有:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. 重启消息处理器:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. 如果您将双向 TLS 与后端搭配使用,请在虚拟主机中设置 TLS 协议,如 配置从 Edge 到后端(云和私有云)的 TLS中所述。

使用旧密码和 TLS 协议: 如果您想使用旧密码或协议,请参阅以下 部分。

使用旧版 TLS

在 Java 21 中,旧版 TLS 协议 (TLSv1, TLSv1.1, 和 SSLv3) 以及弱迪菲-赫尔曼密钥 (DH keySize < 1024) 默认在 jdk.tls.disabledAlgorithms 中处于停用状态。如需启用它们,请使用以下选项之一:

  • 选项 A:更新后端协议: 更新后端服务器以 支持 TLS 1.2 或 TLS 1.3,并确保迪菲-赫尔曼参数大小为 2048 位或更大(>= 2048 位)。
  • 选项 B:使用 CwC 重新启用旧版协议: 通过使用 代码和配置 (CwC) 从 /opt/apigee/customer/application/message-processor.properties 中的 conf_jvmsecurity_jdk.tls.disabledAlgorithms 移除 TLSv1, TLSv1.1,保持与旧版 TLS 1.0 或 TLS 1.1 后端的兼容性:
    # Re-enable TLS 1.0 and TLS 1.1 for legacy backend connectivity
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, TLS_RSA_*, rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature, include jdk.disabled.namedCurves

使用静态 RSA 密码

Apigee Edge for Private Cloud 版本 4.54.00 在 Java 21 上运行,其中缺少临时迪菲-赫尔曼密钥交换(ECDHE 或 DHE)的静态 RSA 密码套件 (TLS_RSA_*) 默认在 jdk.tls.disabledAlgorithms 中处于停用状态(例如 TLS_RSA_WITH_AES_128_CBC_SHA 或 TLS_RSA_WITH_AES_256_CBC_SHA)。如需支持需要静态 RSA 密码套件的后端,请使用以下选项:

  • 使用 CwC 重新启用静态 RSA 密码: 通过使用 代码和配置 (CwC) 从 /opt/apigee/customer/application/message-processor.properties 中的 conf_jvmsecurity_jdk.tls.disabledAlgorithms 移除 TLS_RSA_*,保持与旧版后端的兼容性:
    # Re-enable Static RSA ciphers for backward compatibility with legacy Java 8 backends
    conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature, include jdk.disabled.namedCurves

修改属性后,使用 apigee-service重启消息处理器:

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

为主机启用 TLS 1.3

本部分介绍了如何为特定虚拟主机启用 TLS 1.3。如需启用 TLS 1.3,请在管理服务器 节点上执行以下步骤:

  1. 在每个管理服务器节点上,修改文件 /opt/apigee/customer/application/management-server.properties 并添加以下行(如果该文件不存在,请创建它):
    conf_virtualhost_virtual.host.allowed.protocol.list=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3

    对于此文件,协议以逗号分隔,且区分大小写。

  2. 保存文件。
  3. 确保该文件归 apigee 用户所有:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
  4. 重启管理服务器:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. 在所有管理服务器节点上逐一重复上述步骤 。
  6. 使用以下 属性创建(或更新现有)虚拟主机。请注意,协议以空格分隔,且区分大小写:
    "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
    }

    以下示例展示了具有此属性的示例 vhost:

    {
      "hostAliases": [
        "api.myCompany,com",
      ],
      "interfaces": [],
      "listenOptions": [],
      "name": "secure",
      "port": "443",
      "retryOptions": [],
      "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
      },
      "sSLInfo": {
        "ciphers": [],
        "clientAuthEnabled": "false",
        "enabled": "true",
        "ignoreValidationErrors": false,
        "keyAlias": "myCompanyKeyAlias",
        "keyStore": "ref://myCompanyKeystoreref",
        "protocols": []
      },
      "useBuiltInFreeTrialCert": false
    }

测试 TLS 1.3

如需测试 TLS 1.3,请输入以下命令:

curl -v --tlsv1.3 "https://api.myCompany,com/testproxy"

请注意,您只能在支持此协议的客户端上测试 TLS 1.3。 如果未启用 TLS 1.3,您会看到类似于以下内容的出错提示:

sslv3 alert handshake failure