Como configurar o TLS para API BaaS

Edge para nuvem privada v. 4.16.09

O TLS (Transport Layer Security, cujo antecessor é o SSL) é a tecnologia de segurança padrão para garantir mensagens seguras e criptografadas no ambiente da API. É possível configurar o TLS nos nós do Portal da API BaaS e da pilha da API BaaS.

A imagem a seguir mostra um diagrama típico de implantação da API BaaS com um único nó do portal do BaaS e três nós da API BaaS Stack.

Os desenvolvedores usam um navegador para fazer solicitações ao Portal. Por padrão, as solicitações usam o protocolo HTTP na porta 9000 do nó do Portal.

Essa implantação inclui um balanceador de carga entre os nós do portal e da pilha. Nesta configuração, o portal faz solicitações HTTP ao balanceador de carga, que as encaminha para um dos nós da pilha. Este é o ambiente de implantação recomendado para um sistema de produção.

Opções de configuração de TLS

Ao configurar o TLS para o BaaS de API, você tem várias opções:

  • Configurar o TLS no portal e no balanceador de carga para os nós da pilha

    Nesta configuração, os desenvolvedores usam o protocolo HTTPS para acessar o portal, e o portal em execução no navegador usa HTTPS para fazer solicitações aos nós da pilha por meio do balanceador de carga. O balanceador de carga usa HTTP para acessar os nós da pilha.
  • Configurar o TLS no portal, no balanceador de carga e nos nós da pilha

    Para mais segurança, configure o balanceador de carga para usar o TLS ao acessar os nós da pilha.
  • Configurar o TLS no Portal e em um único nó da pilha

    Em um ambiente pequeno, como um ambiente de teste ou de desenvolvimento, talvez você tenha apenas um único nó da pilha, o que significa que não é necessário incluir um balanceador de carga. Nessa configuração, configure o TLS nos nós do Portal e da pilha.
  • Configurar o TLS em um balanceador de carga para o Portal

    Uma opção não mostrada acima é usar um balanceador de carga na frente do nó do Portal. Nessa configuração, é possível configurar o TLS no balanceador de carga e, opcionalmente, na conexão entre o balanceador de carga e o portal.

Verifique se a porta TLS está aberta

Os procedimentos abaixo configuram o TLS na porta padrão do Portal 9000 e no nó de pilha 8080. No entanto, é possível mudar essa porta, se quiser.

Independentemente da porta usada, é necessário garantir que ela esteja aberta no nó. Por exemplo, use o seguinte comando para abrir a porta 8443:

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

Como configurar o TLS na pilha API BaaS

Por padrão, o TLS está desativado para a pilha API BaaS. Em seguida, acesse a API BaaS por HTTP usando o endereço IP ou o nome DNS do nó da pilha e a porta 8080. Exemplo:

http://stack_IP:8080

Como alternativa, é possível configurar o acesso TLS à API BaaS para que ela possa ser acessada na forma:

https://stack_IP:8080

Neste exemplo, você configura o acesso TLS para usar a porta 8080. No entanto, a porta 8080 não é necessária. É possível configurar a pilha para usar uma porta diferente. O único requisito é que o firewall permita o tráfego na porta especificada.

A pilha só pode oferecer suporte a um tipo de solicitação (HTTP ou HTTPS) em uma única porta. Portanto, se você configurar o acesso HTTPS na porta 8080, não poderá usar o HTTP para acessar a porta 8080. Se você configurar a pilha para usar a porta 8443 com HTTPS, ela não vai mais detectar a porta 8080.

Use o procedimento a seguir para configurar o acesso TLS à pilha:

  1. Gere o arquivo JKS do keystore que contém a certificação TLS e a chave privada. Para mais informações, consulte Como configurar TLS/SSL para o Edge no local.
    Observação: verifique se a senha no keystore e na chave são iguais.
  2. Copie o arquivo JKS do keystore para um diretório no nó da API, como /opt/apigee/customer/application. O diretório precisa ser acessível ao usuário "apigee".
  3. Mude a propriedade do arquivo JKS para o usuário "apigee":
    > chown apigee:apigee /opt/apigee/customer/application/keystore.jks

    em que keystore.jks é o nome do arquivo de keystore.
  4. Edite o arquivo /opt/apigee/customer/application/usergrid.properties para definir as propriedades a seguir, incluindo o caminho para o arquivo JKS e a senha no keystore e na chave. Se ainda não existir, crie esse arquivo, para criar:
    tomcat-








    /opt/apigee/customer/application/keystore.jks
    # Use essa propriedade para especificar uma porta diferente.
    # tomcat-server_port=8080


    Aviso: o valor senha precisa estar em texto simples. Portanto, proteja usergrid.properties contra acesso não autorizado.

    Use a propriedade tomcat-server_keyalias para especificar o alias do keystore. Você definiu o alias da chave quando ela foi criada. Por exemplo, é possível definir essa opção usando a opção -alias no comando keytool.

    Use tomcat-server_ssl.protocols para definir os protocolos TLS compatíveis com a pilha. Para conferir uma lista de protocolos com suporte do Java 8, consulte http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename.
  5. Configure o nó da pilha:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  6. Implante as mudanças no Tomcat:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy
  7. Reinicie a pilha BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  8. Confirme se o TLS está funcionando executando o comando cURL abaixo no nó da pilha usando HTTPS:
    > curl -k https://localhost:8080/status -v

    Se o TLS estiver configurado corretamente, você verá uma resposta com informações de status.

    Se você configurou o acesso TLS em uma porta diferente da 8080, modifique o comando acima para usar a porta correta.
  9. Repita em todos os nós da pilha.
  10. Se você tiver um balanceador de carga na frente dos nós da pilha, configure o balanceador de carga para fazer solicitações aos nós da pilha por HTTPS. Consulte a documentação do seu balanceador de carga para mais informações.

    Se o portal fizer solicitações diretas para a pilha, configure o portal para acessar a pilha por HTTPS, conforme descrito na próxima seção.
  11. Use o procedimento abaixo em "Configurar nós de pilha de BaaS de API para TLS na pilha ou no portal" para garantir que o nó da pilha tenha os URLs TLS corretos ao gerar respostas do usuário.

Como configurar o Portal para acessar a pilha por TLS

O Portal do BaaS em execução em um navegador funciona fazendo chamadas de API para a pilha do BaaS. Se você configurar a pilha BaaS para usar o TLS, também precisará configurar o Portal para fazer essas chamadas por HTTPS.

Uma instalação de API BaaS geralmente é configurada para:

  • Usar um balanceador de carga entre os nós do Portal e da pilha

    Configure o balanceador de carga para fazer solicitações aos nós da pilha por HTTPS. Consulte a documentação do balanceador de carga para mais informações.

    Nessa configuração, o Portal pode acessar o balanceador de carga por HTTP ou HTTPS, dependendo de como você o configurou. Se o balanceador de carga usar TLS, siga o procedimento abaixo para configurar o portal para fazer solicitações ao balanceador de carga de HTTPS.
  • Fazer com que o portal faça solicitações diretas à pilha

    Configure o portal para acessar a pilha por HTTPS, conforme descrito abaixo.

Use o procedimento a seguir para configurar o Portal do API BaaS para fazer chamadas de API por HTTPS:

  1. Configure o acesso TLS na pilha BaaS, conforme descrito acima, ou no balanceador de carga para os nós de pilha, conforme descrito na documentação do seu balanceador de carga.
  2. Edite /opt/apigee/customer/application/portal.properties para definir a propriedade a seguir. Se esse arquivo não existir, crie-o:
    baas.portal.config.overrideUrl=https://stackIP:port

    Como valor dessa propriedade, especifique o endereço IP ou o nome DNS e a porta do nó da pilha da API para uma instalação de nó único ou do balanceador de carga, se houver um na frente dos nós da pilha da API BaaS.
  3. Configure o nó do Portal:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  4. Reinicie o portal usando o comando:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  5. Se você usou um certificado autoassinado ao configurar o acesso TLS à pilha acima, talvez seu navegador não permita solicitações à pilha pelo Portal. Se aparecer um erro no navegador informando que o acesso HTTPS à pilha não é permitido, solicite o seguinte URL no navegador e adicione uma exceção de segurança para permitir o acesso:
    https://stackIP:port/status

    Especifique o endereço IP ou o nome DNS e a porta do nó da pilha da API ou do balanceador de carga.

Como configurar o TLS no portal da API BaaS

Por padrão, os usuários acessam o portal fazendo solicitações HTTP não criptografadas pela porta 9000 no servidor do portal. É possível configurar o portal para usar HTTPS para criptografar os dados enviados de e para o portal.

Por padrão, você acessa o Portal por HTTP usando o endereço IP ou o nome DNS do nó do Portal e a porta 9000. Exemplo:

http://portal_IP:9000

Como alternativa, você pode configurar o acesso TLS ao Portal para acessá-lo no formulário:

https://portal_IP:9443

Neste exemplo, você configura o acesso TLS para usar a porta 9443. No entanto, a porta 9443 não é necessária. É possível configurar o portal para usar uma porta diferente.

O portal aceita apenas um tipo de solicitação (HTTP ou HTTPS) em uma única porta. Portanto, se você configurar o acesso HTTPS na porta 9000, não será possível usar HTTP para acessar a porta 9000. Se você configurar o Portal para usar a porta 9443 com HTTPS, ele não vai mais escutar na porta 9000.

Para configurar o TLS para o portal:

  1. Crie um arquivo de chave e um arquivo de certificado no formato PEM.
    Observação: verifique se não há senha/senha longa na chave ou no certificado.
  2. Copie os arquivos PEM para um diretório no nó do Portal, como /opt/apigee/customer/application. O diretório precisa ser acessível ao usuário "apigee".
  3. Mude a propriedade dos arquivos PEM para o usuário "apigee":
    > chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. Edite o arquivo /opt/apigee/customer/application/portal.properties para definir as propriedades a seguir. Se esse arquivo não existir, crie-o:
    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
    # Por padrão, o acesso TLS usa a porta 9000.
    # Use essa propriedade para especificar uma porta diferente.
    # baas.portal.listen=9000


    Use baas.portal.ssl.protocols para definir os protocolos TLS aceitos pelo Portal. Para conferir uma lista de protocolos compatíveis, consulte a lista de nomes de protocolos SSL definidos pelo Nginx: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols.
  5. Configure o nó do portal:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  6. Implante a configuração:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy
  7. Reinicie o portal:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  8. Use o procedimento abaixo em "Configurar nós de pilha do BaaS de API para TLS na pilha ou portal" para garantir que o nó de pilha tenha o URL TLS correto para o portal.

Configurar nós de API BaaS para TLS no Stack ou Portal

Se você incluir um balanceador de carga na frente dos nós da pilha ou do portal ou se ativar o TLS diretamente neles, precisará configurar os nós com os URLs corretos para acessar a pilha e o portal. Por exemplo, os nós da pilha exigem essas informações quando:

  • Incluir um URL nas respostas em solicitações da API BaaS.
  • Adicionar links em modelos de e-mail ao redefinir uma senha ou enviar outras notificações.
  • Redirecionar os usuários para páginas específicas do portal.

Se você usar um balanceador de carga na frente dos nós da pilha ou configurar o TLS no nó da pilha, defina as seguintes propriedades em /opt/apigee/customer/application/usergrid.properties:

usergrid-deployment_swagger.basepath=http://localhost:8080
usergrid-deployment_usergrid.organization.activation.url=http://localhost:8080/management/organizations/%s/activate
usergrid-deployment_usergrid.admin.activation.url=http://localhost:8080/management/users/%s/activate
usergrid-deployment_usergrid.admin.resetpw.url=http://localhost:8080/management/users/%s/resetpw
usergrid-deployment_usergrid.admin.confirmation.url=http://localhost:8080/management/users/%s/confirm
usergrid-deployment_usergrid.user.activation.url=http://localhost:8080/%s/%s/users/%s/activate
usergrid-deployment_usergrid.user.confirmation.url=http://localhost:8080/%s/%s/users/%s/confirm
usergrid-deployment_usergrid.user.resetpw.url=http://localhost:8080/%s/%s/users/%s/resetpw

Substitua http://localhost:8080 pelo URL do balanceador de carga. Se o balanceador de carga estiver configurado para usar TLS, use o protocolo HTTPS. Só é necessário incluir a porta se você estiver usando uma porta não padrão, ou seja, algo diferente da porta 80 para HTTP e da porta 443 para HTTPS.

Também será preciso definir a seguinte propriedade em /opt/apigee/customer/application/portal.properties se você usar um balanceador de carga na frente dos nós de pilha:

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

Substitua http://localhost:8080 pelo URL do balanceador de carga da pilha.

Se você usar um balanceador de carga na frente do nó do portal ou configurar o TLS no nó "Stack", defina as seguintes propriedades em usergrid.properties:

usergrid-deployment_usergrid.view.management.organizations.organization.activate=http://localhost:9000
usergrid-deployment_usergrid.view.management.organizations.organization.confirm=http://localhost:9000
usergrid-deployment_usergrid.view.management.users.user.activate=http://localhost:9000
usergrid-deployment_usergrid.view.management.users.user.confirm=http://localhost:9000

Substitua http://localhost:9000 pelo URL do balanceador de carga. Se o balanceador de carga estiver configurado para usar TLS, use o protocolo HTTPS. Você só precisa incluir a porta se estiver usando uma porta não padrão, ou seja, algo diferente da porta 80 para HTTP e 443 para HTTPS.

Depois de editar usergrid.properties:

  1. Configure o nó da pilha:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid configure
  2. Implante as mudanças no Tomcat:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid deploy
  3. Reinicie a pilha BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid restart
  4. Se você modificou portal.properties, configure o nó do portal:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal configure
  5. Implante as mudanças:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal deploy
  6. Reinicie o portal do BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart