Introdução
Por padrão, diferentes componentes do Edge para nuvem privada, como processadores de mensagens, servidores de gerenciamento e roteadores, se conectam a nós do Cassandra por um canal de texto simples. Nesses canais, os dados de e para o Cassandra são comunicados de forma clara. O mTLS do Apigee é um recurso baseado em malha de serviços do Consul que adiciona segurança às comunicações entre componentes no cluster do Edge para nuvem privada. Essa oferta da Apigee também adiciona segurança TLS ao canal de comunicação entre os componentes do cliente e o Cassandra.
Este artigo aborda uma nova oferta alternativa da Apigee em que a comunicação entre componentes do cliente e o Cassandra no Edge para nuvem privada é protegida por TLS mútuo (também conhecido como TLS bidirecional) usando recursos disponíveis nativamente no Cassandra sem usar uma malha de serviço externa.
Recurso nativo de mTLS
Para ativar o mTLS entre o Cassandra e os componentes do cliente descritos neste artigo, é necessário usar os recursos de TLS fornecidos nativamente pelo Apache Cassandra. Quando ativadas, as conexões de clientes com o Cassandra (na porta de transporte nativa do CQL 9042) realizam um handshake TLS bidirecional com os clientes antes de permitir que as conexões sejam estabelecidas. Para fins dessa conexão TLS bidirecional, o Cassandra atua como o servidor, e vários clientes que se conectam a ele (como edge-message-processor, ferramenta cqlsh etc.) atuam como clientes.
Para o TLS bidirecional (ou TLS mútuo ou mTLS), o Cassandra e os clientes precisam ser configurados com keystores próprios. O keystore de cada nó do Cassandra precisa conter a própria chave e o certificado. O keystore de cada aplicativo cliente precisa conter a chave e o certificado desse cliente específico. Um truststore com os certificados e a cadeia associada da contraparte precisa ser adicionado ao Cassandra e aos clientes. Cada keystore de confiança do nó do Cassandra precisa conter certificados de clientes, e cada keystore de confiança do cliente precisa conter certificados de todos os nós do Cassandra. Consulte o artigo sobre TLS/SSL bidirecional da Apigee para mais informações sobre como um handshake TLS bidirecional geralmente funciona.
Encadeamento de certificados
Em geral, no TLS bidirecional, os certificados do servidor, os certificados do cliente, as cadeias de certificados, os keystores e os truststores podem ser criados de várias maneiras. O mesmo vale para o Cassandra e o mTLS nativo do cliente. Considerando como as organizações normalmente operam clusters do Edge para nuvem privada e o número de pares de conexão cliente-cassandra exclusivos que podem ser estabelecidos, a Apigee recomenda adotar a seguinte abordagem geral para configurar chaves e certificados para esse recurso. Existem outros métodos viáveis, mas o abaixo provavelmente oferece um bom equilíbrio entre segurança e sobrecarga de manutenção.
Adquira um certificado raiz e um par de chave/certificado intermediário assinado pela raiz. Talvez você já tenha essas chaves e certificados. Caso contrário, crie certificados e chaves raiz e intermediários autoassinados usando as etapas do Apêndice 1.
- Use a chave/certificado intermediário comum acima para assinar todas as chaves e certificados específicos do aplicativo (folha).
Ter uma chave/certificado intermediário comum em um cluster faz com que um truststore comum (contendo a mesma cadeia de certificados raiz e intermediários) seja configurado em todos os nós do Cassandra e do cliente. Cada nó do Cassandra e aplicativo cliente recebe uma chave folha e um certificado exclusivos assinados pela chave/certificado intermediário comum.
- A rotação de um certificado folha de um nó do Cassandra ou de um aplicativo cliente é simples.
- A rotação de um certificado intermediário ou raiz ainda é uma operação bastante complexa, mas a frequência dessas rotações será muito menor do que a dos certificados de folha.
Use as práticas de segurança da sua organização para decidir se é necessário usar certificados raiz e intermediários comuns em diferentes clusters de nuvem privada. Consulte o Apêndice 2 para ver configurações alternativas de certificado.
As etapas restantes neste artigo fornecem detalhes sobre a metodologia acima de design de chaves e certificados.
Limitações e ressalvas
As seguintes limitações se aplicam a esse recurso:
- Essa oferta de mTLS nativo entre componentes do cliente e o Cassandra NÃO é compatível com apigee-mtls. Se você estiver usando esse recurso, não poderá usar o apigee-mtls e vice-versa.
- A ativação do mTLS entre os componentes do cliente e o Cassandra terá um impacto no desempenho das conexões estabelecidas entre os clientes e o Cassandra. Operações como inicialização de clientes ou escalonamento de conexões do Cassandra podem ser mais lentas, já que o Cassandra e os clientes precisam negociar o TLS antes de iniciar a comunicação. O impacto deve ser pequeno e geralmente não perceptível.
- No Cassandra, o mTLS pode ser aplicado opcionalmente em conexões de clientes de entrada. Embora seja possível ativar a aplicação, ela precisa ser desativada durante tarefas operacionais, como upgrades do software da Apigee, ativação/desativação de recursos do TLS e determinados tipos de rotações de certificados. Consulte a seção Operações e configurações para mais detalhes.
- O gerenciamento e a manutenção dos certificados são de responsabilidade do cliente.
- A rotação de certificados tem várias nuances. Consulte a seção Rotações de certificados para mais detalhes.
Ativar o mTLS nativo
Em um nível alto, a ativação do mTLS nativo é um procedimento de três etapas, conforme descrito abaixo:
- Procure um certificado raiz e um par de chave/certificado intermediário.
- Crie um par de chave/certificado folha de um nó do Cassandra, assine, armazene em um keystore e configure o Cassandra para mTLS opcional. Repita as etapas para cada nó do Cassandra, um de cada vez.
- Crie um par de chave/certificado de folha de um aplicativo cliente, assine e armazene em um keystore e configure o aplicativo cliente para mTLS. Repita as etapas em cada aplicativo cliente, um de cada vez. Aplicativos cliente:
- edge-management-server
- edge-message-processor
- edge-router
Confira os detalhes abaixo:
Adquirir certificados raiz e intermediários
Adquira um certificado raiz e um par de chave/certificado intermediário assinado pela raiz. Use o certificado raiz e intermediário assinado pela CA da sua organização ou crie certificados autoassinados. Armazene a cadeia de certificados raiz e intermediários em um truststore. Consulte o Apêndice 1 para ver comandos úteis. Os comandos subsequentes pressupõem que você tenha acesso aos seguintes arquivos:
intermediate.key
: arquivo de chave para certificado intermediário para assinatura de certificados folhaintermediate-cert.pem
: certificado intermediário
Configurar nós do Cassandra
- Escolha um nó do Cassandra
- Gere um par de chave e certificado folha e assine com o certificado intermediário. Armazene a chave e o certificado assinado em um keystore. Veja um exemplo a seguir:
# Generate Leaf key and csr openssl req -newkey rsa:2048 -keyout cass-node1.key -out cass-node1-req.pem -sha256 -days 365 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=yourip/emailAddress=cassnode1@yourorg.com" # leaf cert signed by intermediate openssl x509 -req -in cass-node1-req.pem -CAkey intermediate.key -CA intermediate-cert.pem -days 365 -CAcreateserial -out cass-node1-cert.pem # keystore packaging leaf key and cert openssl pkcs12 -export -clcerts -in cass-node1-cert.pem -inkey cass-node1.key -out cass-node1-keystore.pfx -name nativemtls -password pass:keystorepass
Coloque os arquivos de keystore e truststore em um local específico no nó e verifique se eles estão acessíveis ao usuário apigee.
cp cass-node1-keystore.pfx /opt/apigee/customer/application/ cp truststore.pfx /opt/apigee/customer/application/ chown apigee:apigee /opt/apigee/customer/application/cass-node1-keystore.pfx chown apigee:apigee /opt/apigee/customer/application/truststore.pfx
- Crie ou edite o arquivo
/opt/apigee/customer/application/cassandra.properties
. Adicione o seguinte conteúdo ao arquivo:### Enable Cassandra TLS on CQL connections conf_cassandra_client_encryption_enabled=true ### Optional TLS - true or false conf_cassandra_client_encryption_optional=true ### Keystore details conf_cassandra_client_encryption_keystore=/opt/apigee/customer/application/cass-node1-keystore.pfx conf_cassandra_client_encryption_keystore_password=keystorepass conf_cassandra_server_encryption_store_type=PKCS12 ### Whether to enable 2-way TLS (or mTLS) - true or false conf_cassandra_client_encryption_require_client_auth=true ### When 2-way TLS is enabled, client certificate details need to be provided via a truststore conf_cassandra_client_encryption_truststore=/opt/apigee/customer/application/truststore.pfx conf_cassandra_client_encryption_truststore_password=trustpass conf_cassandra_client_encryption_store_type=PKCS12
Além disso, para sistemas operacionais compatíveis com FIPS, adicione a seguinte propriedade ao arquivo
/opt/apigee/customer/application/cassandra.properties
:conf_cassandra_client_encryption_protocol=TLSv1.2
Verifique se o arquivo pertence e pode ser lido pelo usuário do Apigee:
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Configurar e reiniciar o nó do Cassandra
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Repita as etapas acima em cada nó do Cassandra, um de cada vez.
Configurar aplicativos cliente
Esta seção se aplica aos seguintes componentes do cliente que se conectam ao Cassandra:
- edge-management-server
- edge-message-processor
- edge-router
- Escolher um componente do cliente
- Gere um par de chave e certificado folha e assine com o certificado intermediário. Armazene a chave e o certificado assinado em um keystore. Veja um exemplo a seguir:
# Generate Leaf key and csr openssl req -newkey rsa:2048 -keyout mgmt-node1.key -out mgmt-node1-req.pem -sha256 -days 365 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=yourip/emailAddress=mgmtnode1@yourorg.com" # leaf cert signed by intermediate openssl x509 -req -in mgmt-node1-req.pem -CAkey intermediate.key -CA intermediate-cert.pem -days 365 -CAcreateserial -out mgmt-node1-cert.pem # keystore packaging leaf key and cert openssl pkcs12 -export -clcerts -in mgmt-node1-cert.pem -inkey mgmt-node1.key -out mgmt-node1-keystore.pfx -name nativemtls -password pass:keystorepass
Coloque os arquivos de keystore e truststore em um local específico no nó e verifique se eles estão acessíveis ao usuário apigee.
cp mgmt-node1-keystore.pfx /opt/apigee/customer/application/ cp truststore.pfx /opt/apigee/customer/application/ chown apigee:apigee /opt/apigee/customer/application/mgmt-node1-keystore.pfx chown apigee:apigee /opt/apigee/customer/application/truststore.pfx
- Crie e edite o arquivo de configuração com base no aplicativo que você está configurando
Aplicativo Arquivo de configuração Servidor de gerenciamento /opt/apigee/customer/application/management-server.properties
Processador de gerenciamento /opt/apigee/customer/application/message-processor.properties
Roteador /opt/apigee/customer/application/router.properties
Adicione as seguintes configurações ao arquivo:
### Enable TLS on CQL connections conf_cassandra_sslconfig.enable.tls=true conf_cassandra_sslconfig.enable.mtls=true ### Keystore Details conf_cassandra_sslconfig.keystore.path=/opt/apigee/customer/application/mgmt-node1-keystore.pfx conf_cassandra_sslconfig.keystore.password=keystorepass conf_cassandra_sslconfig.keystore.type=PKCS12 ### Truststore Details conf_cassandra_sslconfig.truststore.path=/opt/apigee/customer/application/truststore.pfx conf_cassandra_sslconfig.truststore.password=trustpass conf_cassandra_sslconfig.truststore.type=PKCS12
Verifique se o arquivo de configuração pertence ao usuário do Apigee e pode ser lido por ele.
chown apigee:apigee configuration file ### Example: chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- Reiniciar o aplicativo cliente
# Configure and restart service: apigee-service component configure apigee-service component restart # Example, to configure and restart message processor application apigee-service edge-message-processor configure apigee-service edge-message-processor restart
- Para validar se o SSL foi configurado corretamente no aplicativo cliente, procure registros nas linhas abaixo no registro do sistema do aplicativo adequado:
Opções de SSL adicionadas à conexão do Cassandra
- Repita as etapas acima em cada aplicativo cliente, um de cada vez.
Operações e configurações
aplicar mTLS;
Quando o mTLS não é aplicado no Cassandra, ele aceita conexões de texto simples de clientes ou clientes com quem pode realizar um handshake TLS bidirecional. Para que a aplicação do mTLS funcione, ele precisa ser configurado primeiro no Cassandra. Para definir a aplicação de mTLS no Cassandra, siga estas etapas:
- Escolha um nó do Cassandra
- Crie ou edite o arquivo
/opt/apigee/customer/application/cassandra.properties
. Adicione ou edite a seguinte propriedade neste arquivo:### Optional TLS - true or false conf_cassandra_client_encryption_optional=false
Verifique se o arquivo pertence ao usuário do Apigee e pode ser lido por ele.
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Configurar e reiniciar o nó do Cassandra
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Repita as etapas acima em cada nó do Cassandra, um de cada vez.
Depois que o mTLS é aplicado no Cassandra, a ferramenta de consulta padrão do Cassandra cqlsh não pode se conectar diretamente ao Cassandra. Para configurar o cqlsh para SSL, gere uma nova chave e um certificado folha (semelhante à chave e ao certificado folha para aplicativos cliente) e faça o seguinte:
- Criar ou editar o arquivo
$HOME/.cassandra/cqlshrc
- Adicione o seguinte conteúdo ao arquivo:
[ssl] certfile = /home/admin-user/certs/inter-root.pem validate = false userkey = /home/admin-user/certs/cqlsh1.key usercert = /home/admin-user/certs/cqlsh1-cert.pem
certfile
: arquivo de certificado que contém a cadeia de certificados raiz e intermediáriauserkey
: chave do cliente a ser usada pelo cqlsh. Esse precisa ser um par de chave/certificado folha que você pode gerar e assinar com o certificado intermediário.usercert
: certificado do cliente a ser usado pelo cqlsh. Essa deve ser uma chave/certificado folha que você pode gerar e assinar com o certificado intermediário.
- Execute o comando
cqlsh
normalmente, fornecendo o argumento--ssl
. Por exemplo:$ /opt/apigee/apigee-cassandra/bin/cqlsh --ssl X.X.X.X Connected to Apigee at X.X.X.X:9042 [cqlsh 6.0.0 | Cassandra 4.0.13 | CQL spec 3.4.5 | Native protocol v5] Use HELP for help. cqlsh>
Desativar a aplicação do mTLS no Cassandra
Para desativar a aplicação do mTLS no Cassandra, siga as etapas abaixo:
- Escolha um nó do Cassandra
- Crie ou edite o arquivo
/opt/apigee/customer/application/cassandra.properties
. Adicione ou edite a seguinte propriedade neste arquivo:### Optional TLS - true or false conf_cassandra_client_encryption_optional=true
Verifique se o arquivo pertence ao usuário do Apigee e pode ser lido por ele.
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Configurar e reiniciar o nó do Cassandra
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Repita as etapas acima em cada nó do Cassandra, um de cada vez.
Desativar o mTLS nativo
A desativação do mTLS nativo é um processo de várias etapas, semelhante à ativação do mTLS nativo. As etapas gerais são:
- Desative a aplicação do mTLS no Cassandra (se estiver ativada).
- Desative o mTLS em todos os nós dos seguintes aplicativos cliente, um por um:
- edge-management-server
- edge-message-processor
- edge-router
- Crie e edite o arquivo de configuração com base no aplicativo que você está configurando:
Aplicativo Arquivo de configuração Servidor de gerenciamento /opt/apigee/customer/application/management-server.properties
Processador de gerenciamento /opt/apigee/customer/application/message-processor.properties
Roteador /opt/apigee/customer/application/router.properties
- Adicione ou edite as seguintes propriedades no arquivo de configuração:
### TLS on CQL connections conf_cassandra_sslconfig.enable.tls=false conf_cassandra_sslconfig.enable.mtls=false
- Verifique se o arquivo de configuração pertence ao usuário do Apigee e pode ser lido por ele:
chown apigee:apigee configuration file ### Example: chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- Reinicie o aplicativo cliente:
# Configure and restart service: apigee-service component configure apigee-service component restart # Example, to configure and restart message processor application apigee-service edge-message-processor configure apigee-service edge-message-processor restart
- Repita as etapas #a a #d em cada aplicativo cliente, um de cada vez.
- Desative o mTLS em todos os nós do Cassandra um por um:
- Escolha um nó do Cassandra.
- Crie ou edite o arquivo
/opt/apigee/customer/application/cassandra.properties
. Adicione ou edite a seguinte propriedade neste arquivo:### Cassandra TLS on CQL connections conf_cassandra_client_encryption_enabled=false
Verifique se o arquivo pertence ao usuário do Apigee e pode ser lido por ele.
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Configurar e reiniciar o nó do Cassandra
- Repita as etapas #a a #c em cada nó do Cassandra, um por vez.
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
Rotações de certificados
Rotação apenas para certificados folha (mantendo os mesmos certificados intermediários e raiz)Siga etapas semelhantes a Configurar aplicativos cliente:
- Gere uma nova chave/certificado folha para um aplicativo usando a mesma chave/certificado intermediário.
- Configure o caminho para a nova chave/certificado folha no aplicativo junto com a senha e o tipo de keystore.
- Reiniciar a inscrição
Se você planeja fazer a rotação de um certificado intermediário ou raiz, recomendamos que isso seja feito em várias etapas:
- Desative o mTLS nativo do Cassandra em todo o cluster.
- Use os novos certificados raiz e intermediários para gerar novos certificados de ramificação, folha ou aplicativo.
- Siga as etapas para ativar o mTLS nativo do Cassandra usando o novo conjunto de chaves e certificados.
Operações gerais da Apigee
Para realizar operações gerais da Apigee, como fazer upgrade do software da Apigee, adicionar ou remover nós do Cassandra, adicionar ou remover data centers, ativar ou desativar a autenticação do Cassandra etc., verifique se o mTLS não está sendo aplicado no Cassandra. Se você tiver aplicado o mTLS, desative a aplicação antes de continuar com essas operações.
Apêndice 1
Siga as etapas neste apêndice para gerar um par de chave/certificado raiz e intermediário autoassinado e adicionar essa cadeia de certificados a um truststore.Gerar certificados raiz e intermediários autoassinados
# Create self-signed root key and cert openssl req -x509 -newkey rsa:2048 -keyout root.key -out root-cert.pem -sha256 -days 3650 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=root.yourorg.com/emailAddress=apigeeroot@yourorg.com" # Create intermediate key and cert (signed by root) openssl req -newkey rsa:2048 -keyout intermediate.key -out intermediate-req.pem -sha256 -days 3650 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=inter.yourorg.com/emailAddress=apigeeinter@yourorg.com" openssl x509 -req -in intermediate-req.pem -CAkey root.key -CA root-cert.pem -days 3650 -CAcreateserial -out intermediate-cert.pem
Gerar truststore
# Merge root and intermediate cert into 1 file cat intermediate-cert.pem > inter-root.pem cat root-cert.pem >> inter-root.pem # Create truststore to be used everywhere keytool -keystore truststore.pfx -storetype PKCS12 -importcert -file inter-root.pem -keypass trustpass -storepass trustpass -alias nativemtls -noprompt
Apêndice 2: configurações alternativas de encadeamento de certificados
Embora este artigo recomende uma configuração de encadeamento de certificados específica que equilibra segurança e facilidade de operações, existem alternativas descritas abaixo. A maioria dos princípios gerais também se aplica a outras metodologias, como:
- Ter chaves e certificados diretos para cada nó do Cassandra ou aplicativo cliente (sem raiz de assinatura ou certificados intermediários). Isso provavelmente vai tornar a rotação de certificados complexa.
- Ter vários conjuntos de raízes e intermediários para diferentes casos de uso. Por exemplo, os nós do Cassandra têm um conjunto de certificados raiz/intermediários usando o qual todos os certificados folha do Cassandra são assinados. Da mesma forma, todos os aplicativos cliente podem ter um conjunto raiz/intermediário separado para assinar certificados folha de aplicativo. Essas configurações são viáveis, mas envolvem a adição da cadeia de certificados raiz/intermediária ao keystore de confiança apropriado. Neste exemplo, os truststores do Cassandra precisam conter certificados raiz/intermediários do cliente, e os aplicativos cliente precisam ter a cadeia raiz/intermediária dos nós do Cassandra no truststore.
- Assim como acima, você pode ter vários conjuntos de certificados raiz e intermediários para diferentes regiões, mas todos os clientes e servidores em todas as regiões precisam conhecer todas as cadeias raiz e intermediárias. Para isso, adicione todas elas ao truststore configurado.