Como configurar o protocolo TLS para o roteador e o processador de mensagens

Por padrão, no Apigee Edge para nuvem privada 4.54.00, o roteador (Nginx) e o processador de mensagens (Java 21) ativam TLSv1.2 e TLSv1.3. Dependendo das suas necessidades de negócios e práticas de segurança talvez você queira restringir os protocolos permitidos ou reativar protocolos mais antigos. Este documento descreve como configurar os protocolos TLS para tráfego de entrada e saída no roteador e no processador de mensagens.

Para o roteador, também é possível definir o protocolo para hosts virtuais individuais. Consulte Como configurar o acesso TLS a uma API para a nuvem privada para mais informações.

Para o processador de mensagens, é possível definir o protocolo para um TargetEndpoint individual. Consulte Como configurar o TLS da borda para o back-end (nuvem e nuvem privada) para mais informações.

Definir o protocolo TLS no roteador

As propriedades a seguir ajudam a definir os protocolos TLS desejados no roteador para comunicação de entrada.

Para definir o protocolo TLS no roteador, defina as propriedades no arquivo router.properties:

  1. Abra o arquivo router.properties em um editor. Se o arquivo não existir, crie-o:
    vi /opt/apigee/customer/application/router.properties
  2. Defina as propriedades conforme desejado:
    # 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. Salve as alterações.
  4. Verifique se o arquivo de propriedades pertence ao usuário apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  5. Reinicie o roteador:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. Verifique se o protocolo foi atualizado corretamente examinando o arquivo Nginx /opt/nginx/conf.d/0-default.conf:
    cat /opt/nginx/conf.d/0-default.conf

    Verifique se o valor de ssl_protocols é TLSv1.2.

  7. Se você estiver usando o TLS bidirecional com um host virtual, também será necessário definir o protocolo TLS no host virtual, conforme descrito em Como configurar o acesso TLS a uma API para a nuvem privada.

Definir o protocolo TLS no processador de mensagens

As propriedades a seguir ajudam a definir os protocolos TLS desejados no processador de mensagens para comunicação de saída. Esta seção também descreve como trabalhar com protocolos e cifras TLS desativados.

Para definir o protocolo TLS no processador de mensagens, defina as propriedades no message-processor.properties arquivo:

  1. Abra o arquivo message-processor.properties em um editor. Se o arquivo não existir, crie-o:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Configure as propriedades usando a seguinte sintaxe:
    # 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[,...]

    Exemplo:

    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

    Para uma lista completa de propriedades relacionadas, consulte Como configurar o TLS entre um roteador e um processador de mensagens.

  3. Salve as alterações.
  4. Verifique se o arquivo de propriedades pertence ao usuário apigee:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. Reinicie o processador de mensagens:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  6. Se você estiver usando o TLS bidirecional com o back-end, defina o protocolo TLS no host virtual, conforme descrito em Como configurar o TLS da borda para o back-end (nuvem e nuvem privada).

Como trabalhar com cifras e protocolos TLS mais antigos: consulte as seções a seguir se quiser trabalhar com cifras ou protocolos mais antigos.

Trabalhar com TLS mais antigo

No Java 21, os protocolos TLS legados (TLSv1, TLSv1.1 e SSLv3) e as chaves de troca de chaves de Diffie-Hellman fracas (DH keySize < 1024) são desativados por padrão em jdk.tls.disabledAlgorithms. Para ativá-los, use uma das seguintes opções:

  • Opção A: modernizar protocolos de back-end: atualize os servidores de back-end para oferecer suporte ao TLS 1.2 ou TLS 1.3 e verifique se os tamanhos dos parâmetros do algoritmo de Diffie-Hellman são 2048 bits ou mais (>= 2048 bits).
  • Opção B: reativar protocolos legados usando o CwC: Mantenha a compatibilidade com back-ends legados do TLS 1.0 ou TLS 1.1 removendo TLSv1, TLSv1.1 de conf_jvmsecurity_jdk.tls.disabledAlgorithms em /opt/apigee/customer/application/message-processor.properties usando código com configuração (CwC):
    # 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

Trabalhar com cifras RSA estáticas

O Apigee Edge para nuvem privada versão 4.54.00 é executado no Java 21, em que os pacotes de criptografia RSA estáticos (TLS_RSA_*) que não têm troca de chaves de Diffie-Hellman temporárias (ECDHE ou DHE) são desativados por padrão em jdk.tls.disabledAlgorithms (por exemplo, TLS_RSA_WITH_AES_128_CBC_SHA ou TLS_RSA_WITH_AES_256_CBC_SHA). Para oferecer suporte a back-ends que exigem pacotes de criptografia RSA estáticos, use a seguinte opção:

  • Reativar cifras RSA estáticas usando o CwC: Mantenha a compatibilidade com back-ends legados removendo TLS_RSA_* de conf_jvmsecurity_jdk.tls.disabledAlgorithms em /opt/apigee/customer/application/message-processor.properties usando código com configuração (CwC):
    # 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

Depois de modificar as propriedades, reinicie o processador de mensagens usando apigee-service:

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

Ativar o TLS 1.3 para hosts

Esta seção explica como ativar o TLS 1.3 para hosts virtuais específicos. Para ativar o TLS 1.3, siga estas etapas nos nós do servidor de gerenciamento:

  1. Em cada nó do servidor de gerenciamento, edite o arquivo /opt/apigee/customer/application/management-server.properties e adicione a seguinte linha (se o arquivo não existir, crie-o):
    conf_virtualhost_virtual.host.allowed.protocol.list=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3

    Para esse arquivo, os protocolos são separados por vírgulas e diferenciam maiúsculas de minúsculas.

  2. Salve o arquivo.
  3. Verifique se o arquivo pertence ao usuário apigee:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
  4. Reinicie o servidor de gerenciamento:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Repita as etapas anteriores em todos os nós do servidor de gerenciamento, um por um.
  6. Crie (ou atualize um host virtual) com a seguinte propriedade. Os protocolos são separados por espaços e diferenciam maiúsculas de minúsculas:
    "properties": {
        "property": [
          {
            "name": "ssl_protocols",
            "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
          }
        ]
    }

    O exemplo a seguir mostra um vhost de amostra com essa propriedade:

    {
      "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
    }

Como testar o TLS 1.3

Para testar o TLS 1.3, insira o seguinte comando:

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

Só é possível testar o TLS 1.3 em clientes que oferecem suporte a esse protocolo. Se o TLS 1.3 não estiver ativado, você verá uma mensagem de erro semelhante a esta:

sslv3 alert handshake failure