Introduzione
Per impostazione predefinita, i diversi componenti di Edge for Private Cloud, come i processori di messaggi, i server di gestione e i router, si connettono ai nodi Cassandra tramite un canale di testo non crittografato. Su questi canali, i dati da e verso Cassandra vengono comunicati in chiaro. Apigee mTLS è una funzionalità basata su consul service-mesh che aggiunge sicurezza alle comunicazioni tra i componenti nel cluster Edge for Private Cloud. Questa offerta di Apigee aggiunge anche la sicurezza TLS al canale di comunicazione tra i componenti client e Cassandra.
Questo articolo illustra una nuova offerta alternativa di Apigee in cui la comunicazione tra i componenti client e Cassandra in Edge for Private Cloud è protetta tramite mutual TLS (noto anche come TLS a due vie) utilizzando le funzionalità disponibili in modo nativo in Cassandra senza utilizzare un service mesh esterno.
Funzionalità mTLS nativa
L'abilitazione di mTLS tra Cassandra e i componenti client descritti in questo articolo si basa sulle funzionalità TLS fornite in modo nativo da Apache Cassandra. Quando è abilitata, le connessioni client a Cassandra (sulla porta di trasporto nativa CQL 9042) eseguono un handshake TLS a due vie con i client prima di consentire l'instaurazione delle connessioni. Ai fini di questa connessione TLS a due vie, Cassandra funge da server e i vari client che si connettono a Cassandra (come edge-message-processor, lo strumento cqlsh e così via) fungono da client.
Per TLS a due vie (o mutual TLS o mTLS), sia Cassandra sia i client devono essere configurati con il proprio archivio chiavi. L'archivio chiavi di ogni nodo Cassandra deve contenere la propria chiave e il proprio certificato. L'archivio chiavi di ogni applicazione client deve contenere la chiave e il certificato specifici del client. Sia su Cassandra sia sui client deve essere aggiunto un archivio attendibilità contenente i certificati e la catena associata della controparte. L'archivio attendibilità di ogni nodo Cassandra deve contenere i certificati dei client e l'archivio attendibilità di ogni client deve contenere i certificati di tutti i nodi Cassandra. Per ulteriori informazioni sul funzionamento generale di un handshake TLS a due vie, consulta l'articolo TLS/SSL a due vie di Apigee.
Catena di certificati
In genere, in TLS a due vie, i certificati server, i certificati client, le catene di certificati, gli archivi chiavi e gli archivi attendibilità possono essere creati in vari modi. Lo stesso vale anche per mTLS nativo di Cassandra e client. Tenendo conto di come le organizzazioni in genere gestiscono i cluster Edge for Private Cloud e del numero di coppie di connessioni client-Cassandra univoche che possono essere stabilite, Apigee consiglia di adottare il seguente approccio generale per la configurazione di chiavi e certificati per questa funzionalità. Esistono altri metodi praticabili, ma il metodo riportato di seguito offre probabilmente un buon equilibrio tra sicurezza e overhead di manutenzione.
Procurati un certificato radice e una coppia di chiavi/certificati intermedi firmati dalla radice. Potresti già avere queste chiavi e questi certificati. In caso contrario, puoi creare chiavi e certificati radice e intermedi autofirmati seguendo i passaggi descritti nell'Appendice 1.
- Utilizza la chiave/il certificato intermedio comune di cui sopra per firmare tutte le chiavi e i certificati (foglia) specifici dell'applicazione.
L'utilizzo di una chiave/un certificato intermedio comune in un cluster consente di configurare un archivio attendibilità comune (contenente la stessa catena di certificati radice e intermedi) su ogni nodo Cassandra e client. Ogni nodo Cassandra e applicazione client ottiene la propria chiave e il proprio certificato foglia univoci firmati dalla chiave/dal certificato intermedio comune.
- La rotazione di un certificato foglia di un nodo Cassandra o di un'applicazione client è semplice.
- La rotazione di un certificato intermedio o radice è ancora un'operazione piuttosto complessa, ma la frequenza di queste rotazioni sarà molto inferiore a quella dei certificati foglia.
Utilizza le pratiche di sicurezza della tua organizzazione per decidere se utilizzare certificati radice e certificati intermedi comuni in diversi cluster cloud privati. Per configurazioni di certificati alternative, consulta l'Appendice 2.
I passaggi rimanenti di questo articolo forniscono dettagli sulla metodologia sopra descritta per la progettazione di chiavi e certificati.
Limitazioni e avvertenze
A questa funzionalità si applicano le seguenti limitazioni.
- Questa offerta di mTLS nativo tra i componenti client e Cassandra NON è compatibile con apigee-mtls. Se utilizzi questa funzionalità, non puoi utilizzare apigee-mtls e viceversa.
- L'abilitazione di mTLS tra i componenti client e Cassandra avrà un impatto sulle prestazioni delle connessioni stabilite tra i client e Cassandra. Operazioni come l'avvio dei client o lo scaling delle connessioni Cassandra potrebbero essere più lente, poiché Cassandra e i client devono prima negoziare TLS prima di avviare la comunicazione. L'impatto dovrebbe essere minimo e in genere non percepibile.
- Su Cassandra, mTLS può essere applicato facoltativamente alle connessioni client in entrata. Sebbene l'applicazione possa essere abilitata, deve essere disabilitata durante le attività operative come gli upgrade del software Apigee, l'abilitazione/disabilitazione delle funzionalità TLS e alcuni tipi di rotazioni dei certificati. Per ulteriori dettagli, consulta la sezione Operazioni e configurazioni.
- La gestione e la manutenzione dei certificati sono di responsabilità del cliente.
- La rotazione dei certificati presenta varie sfumature. Per ulteriori dettagli, consulta la sezione Rotazioni dei certificati.
Abilitare mTLS nativo
A livello generale, l'abilitazione di mTLS nativo è una procedura in tre passaggi, come descritto di seguito:
- Procurati un certificato radice e una coppia di chiavi/certificati intermedi.
- Crea una coppia di chiavi/certificati foglia di un nodo Cassandra, firmala, archiviala in un archivio chiavi e configura Cassandra per mTLS facoltativo. Ripeti i passaggi per ogni nodo Cassandra uno alla volta.
- Crea una coppia di chiavi/certificati foglia di un'applicazione client, firmala, archiviala in un archivio chiavi e configura l'applicazione client per mTLS. Ripeti i passaggi su ogni applicazione client uno alla volta. Applicazioni client:
- edge-management-server
- edge-message-processor
- edge-router
Questi passaggi sono descritti di seguito:
Procurarsi certificati radice e intermedi
Procurati un certificato radice e una coppia di chiavi/certificati intermedi firmati dalla radice. Utilizza il certificato radice e intermedio firmato dalla CA della tua organizzazione o crea certificati autofirmati. Archivia la catena di certificati radice e intermedi in un archivio attendibilità. Per i comandi utili, consulta l'Appendice 1. I comandi successivi presuppongono che tu abbia accesso ai seguenti file:
intermediate.key- file di chiavi per il certificato intermedio per la firma dei certificati fogliaintermediate-cert.pem- certificato intermedio
Configurare i nodi Cassandra
- Scegli un nodo Cassandra
- Genera una coppia di chiavi e certificati foglia e firmala con il certificato intermedio. Archivia la chiave e il certificato firmato in un archivio chiavi. Ad esempio:
# 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
Posiziona i file dell'archivio chiavi e dell'archivio attendibilità in una posizione specifica sul nodo e assicurati che siano accessibili dall'utente 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
- Crea o modifica il file
/opt/apigee/customer/application/cassandra.properties. Aggiungi i seguenti contenuti a questo file:### 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
Assicurati che il file sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo:
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Configura e riavvia il nodo Cassandra
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Ripeti i passaggi precedenti su ogni nodo Cassandra uno alla volta
Configurare le applicazioni client
Questa sezione si applica ai seguenti componenti client che si connettono a Cassandra:
- edge-management-server
- edge-message-processor
- edge-router
- Scegli un componente client
- Genera una coppia di chiavi e certificati foglia e firmala con il certificato intermedio. Archivia la chiave e il certificato firmato in un archivio chiavi. Ad esempio:
# 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
Posiziona i file dell'archivio chiavi e dell'archivio attendibilità in una posizione specifica sul nodo e assicurati che siano accessibili dall'utente 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
- Crea e modifica il file di configurazione in base all'applicazione che stai configurando
Applicazione File di configurazione Server di gestione /opt/apigee/customer/application/management-server.propertiesProcessore di gestione /opt/apigee/customer/application/message-processor.propertiesRouter /opt/apigee/customer/application/router.propertiesAggiungi le seguenti configurazioni al file:
### 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
Assicurati che il file di configurazione sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo
chown apigee:apigee configuration file ### Example: chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- Riavvia l'applicazione client
# 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
- Puoi verificare che SSL sia stato configurato correttamente nell'applicazione client cercando i log nelle righe seguenti nel log di sistema dell'applicazione appropriata:
Opzioni SSL aggiunte alla connessione Cassandra
- Ripeti i passaggi precedenti su ogni applicazione client uno alla volta
Operazioni e configurazioni
Applicare mTLS
Quando mTLS non è applicato in Cassandra, Cassandra accetta connessioni di testo non crittografato dai client o dai client con cui può eseguire correttamente un TLS handshake a due vie. Affinché l'applicazione mTLS funzioni, mTLS deve essere configurato prima in Cassandra. Puoi impostare l'applicazione mTLS in Cassandra seguendo i passaggi riportati di seguito:
- Scegli un nodo Cassandra
- Crea o modifica il file
/opt/apigee/customer/application/cassandra.properties. Aggiungi o modifica la seguente proprietà in questo file:### Optional TLS - true or false conf_cassandra_client_encryption_optional=false
Assicurati che il file sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Configura e riavvia il nodo Cassandra
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Ripeti i passaggi precedenti su ogni nodo Cassandra uno alla volta
Una volta applicato mTLS in Cassandra, lo strumento di query Cassandra standard cqlsh non può connettersi direttamente a Cassandra. Per configurare cqlsh per SSL, genera una nuova chiave e un nuovo certificato foglia (simili alla chiave e al certificato foglia per le applicazioni client) ed esegui le seguenti operazioni:
- Crea o modifica il file
$HOME/.cassandra/cqlshrc - Aggiungi i seguenti contenuti al file:
[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- File di certificati contenente la catena di certificati radice e intermediuserkey- Chiave client da utilizzare con cqlsh. Deve essere una coppia di chiavi/certificati foglia che puoi generare e firmare con il certificato intermedio.usercert- Certificato client da utilizzare con cqlsh. Deve essere una coppia di chiavi/certificati foglia che puoi generare e firmare con il certificato intermedio.
- Esegui il comando
cqlshcome di consueto fornendo l'argomento--ssl. Ad esempio:$ /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>
Disabilitare l'applicazione di mTLS su Cassandra
Per disabilitare l'applicazione di mTLS in Cassandra, segui i passaggi riportati di seguito:
- Scegli un nodo Cassandra
- Crea o modifica il file
/opt/apigee/customer/application/cassandra.properties. Aggiungi o modifica la seguente proprietà in questo file:### Optional TLS - true or false conf_cassandra_client_encryption_optional=true
Assicurati che il file sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Configura e riavvia il nodo Cassandra
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Ripeti i passaggi precedenti su ogni nodo Cassandra uno alla volta
Disabilitare mTLS nativo
La disabilitazione di mTLS nativo è un processo in più passaggi, simile a l'abilitazione di mTLS nativo. I passaggi di alto livello sono:
- Disabilita l'applicazione di mTLS in Cassandra (se applicata)
- Disabilita mTLS in tutti i nodi delle seguenti applicazioni client uno alla volta:
- edge-management-server
- edge-message-processor
- edge-router
- Crea e modifica il file di configurazione in base all'applicazione che stai configurando:
Applicazione File di configurazione Server di gestione /opt/apigee/customer/application/management-server.propertiesProcessore di gestione /opt/apigee/customer/application/message-processor.propertiesRouter /opt/apigee/customer/application/router.properties - Aggiungi o modifica le seguenti proprietà nel file di configurazione:
### TLS on CQL connections conf_cassandra_sslconfig.enable.tls=false conf_cassandra_sslconfig.enable.mtls=false
- Assicurati che il file di configurazione sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo:
chown apigee:apigee configuration file ### Example: chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- Riavvia l'applicazione client:
# 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
- Ripeti i passaggi da a a d su ogni applicazione client, uno alla volta.
- Disabilita mTLS su tutti i nodi Cassandra uno alla volta:
- Scegli un nodo Cassandra.
- Crea o modifica il file
/opt/apigee/customer/application/cassandra.properties. Aggiungi o modifica la seguente proprietà in questo file:### Cassandra TLS on CQL connections conf_cassandra_client_encryption_enabled=false
Assicurati che il file sia di proprietà dell'utente apigee e che possa essere letto da quest'ultimo
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Configura e riavvia il nodo Cassandra
- Ripeti i passaggi da a a c su ogni nodo Cassandra, uno alla volta.
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
Rotazioni dei certificati
Rotazione solo per i certificati foglia (mantenendo gli stessi certificati intermedi e radice)Puoi seguire passaggi simili a quelli desc0}Configurare le applicazioni clientritti in:
- Genera una nuova chiave/un nuovo certificato foglia per un'applicazione utilizzando la stessa chiave/lo stesso certificato intermedio
- Configura il percorso della nuova chiave/del nuovo certificato foglia nell'applicazione insieme alla password e al tipo di archivio chiavi
- Riavvia l'applicazione
Se prevedi di ruotare il certificato intermedio o radice, ti consigliamo di eseguire questa operazione in più passaggi:
- Disabilita mTLS nativo di Cassandra nel cluster.
- Utilizza i nuovi certificati radice e intermedi per generare nuovi certificati foglia o applicativi.
- Segui i passaggi per abilitare mTLS nativo di Cassandra utilizzando il nuovo set di chiavi e certificati.
Operazioni Apigee generali
Per eseguire operazioni Apigee generali come l'upgrade del software Apigee, l'aggiunta o la rimozione di nodi Cassandra, l'aggiunta o la rimozione di data center, l'abilitazione o la disabilitazione dell'autenticazione Cassandra e così via, assicurati che mTLS non sia applicato in Cassandra. Se hai applicato mTLS, disabilita l'applicazione prima di procedere con queste operazioni.
Appendice 1
Puoi seguire i passaggi descritti in questa appendice per generare una coppia di chiavi/certificati radice e intermedi autofirmati e aggiungere questa catena di certificati a un archivio attendibilità.Generare certificati radice e intermedi autofirmati
# 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
Generare l'archivio attendibilità
# 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
Appendice 2: configurazioni alternative della catena di certificati
Sebbene questo articolo consigli una configurazione specifica della catena di certificati che bilancia sicurezza e facilità di operazioni, esistono alternative descritte di seguito. La maggior parte dei principi generali si applica anche ad altre metodologie, ad esempio:
- Avere chiavi e certificati foglia diretti per ogni nodo Cassandra o applicazione client (senza certificati radice o intermedi di firma). In questo modo, la rotazione dei certificati sarà probabilmente complessa.
- Avere più set di certificati radice e intermedi per diversi casi d'uso. Ad esempio, i nodi Cassandra hanno un set di certificati radice/intermedi con cui vengono firmati tutti i certificati foglia di Cassandra. Allo stesso modo, tutte le applicazioni client potrebbero avere un set radice/intermedio separato per la firma dei certificati foglia dell'applicazione. Queste configurazioni sono praticabili, ma comportano l'aggiunta della catena di certificati radice/intermedi all'archivio attendibilità appropriato. In questo esempio, gli archivi attendibilità di Cassandra devono contenere i certificati radice/intermedi del client e le applicazioni client devono avere la catena radice/intermedia dei nodi Cassandra nel proprio archivio attendibilità.
- Analogamente a quanto sopra, puoi avere più set di certificati radice e intermedi per diverse regioni, ma tutti i client e tutti i server in tutte le regioni devono essere a conoscenza di tutte le catene radice e intermedie aggiungendole tutte all'archivio attendibilità configurato.