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 in testo normale. Su questi canali, i dati da e verso Cassandra vengono comunicati in chiaro. Apigee mTLS è una funzionalità basata su service mesh di Consul che aggiunge sicurezza alle comunicazioni tra i componenti nel cluster Edge per 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 TLS reciproco (noto anche come TLS bidirezionale) utilizzando funzionalità disponibili in modo nativo in Cassandra senza utilizzare un service mesh esterno.
Funzionalità mTLS nativa
L'attivazione di mTLS tra Cassandra e i componenti client descritti in questo articolo si basa sulle funzionalità TLS fornite in modo nativo da Apache Cassandra. Se abilitate, le connessioni client a Cassandra (sulla porta di trasporto nativa CQL 9042) eseguono un handshake TLS bidirezionale con i client prima di consentire la creazione delle connessioni. Ai fini di questa connessione TLS bidirezionale, Cassandra funge da server e vari client che si connettono a Cassandra (come edge-message-processor, lo strumento cqlsh e così via) fungono da client.
Per TLS bidirezionale (o TLS reciproco o mTLS), sia Cassandra che i client devono essere configurati con il proprio keystore. Il keystore di ogni nodo Cassandra deve contenere la propria chiave e il proprio certificato. Il keystore di ogni applicazione client deve contenere la chiave e il certificato specifici del client. Un truststore contenente i certificati e la catena associata della controparte deve essere aggiunto sia a Cassandra che ai client. Il truststore di ogni nodo Cassandra deve contenere i certificati dei client e il truststore di ogni client deve contenere i certificati di tutti i nodi Cassandra. Per ulteriori informazioni su come funziona in genere l'handshake TLS bidirezionale, puoi consultare l'articolo di Apigee su TLS/SSL bidirezionale.
Concatenazione dei certificati
In genere, in TLS bidirezionale, i certificati server, i certificati client, le catene di certificati, i keystore e i truststore possono essere creati in vari modi. Lo stesso vale anche per Cassandra e mTLS nativo del client. Tenendo conto di come le organizzazioni gestiscono in genere i cluster Edge for Private Cloud e del numero di coppie di connessioni client-Cassandra uniche che possono essere stabilite, Apigee consiglia di adottare il seguente approccio generale per configurare chiavi e certificati per questa funzionalità. Esistono altri metodi validi, ma quello 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 riportati nell'appendice 1.
- Utilizza la chiave/il certificato intermedio comune riportato sopra per firmare tutte le chiavi e i certificati specifici dell'applicazione (foglia).
Avere una chiave/un certificato intermedio comune in un cluster consente di configurare un truststore comune (contenente la stessa catena di certificati radice e intermedi) su ogni nodo Cassandra e client. Ogni nodo Cassandra e applicazione client riceve 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 è banale.
- 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 dell'entità finale.
Utilizza le pratiche di sicurezza della tua organizzazione per decidere se utilizzare certificati root e intermedi comuni in diversi cluster cloud privati. Per configurazioni alternative dei certificati, 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 nativa 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 negoziare prima TLS prima di iniziare la comunicazione. L'impatto dovrebbe essere minimo e non generalmente percepibile.
- Su Cassandra, mTLS può essere applicato facoltativamente alle connessioni client in entrata. L'applicazione può essere attivata, ma deve essere disattivata durante le attività operative come gli upgrade del software Apigee, l'attivazione/disattivazione delle funzionalità TLS e determinati tipi di rotazione dei certificati. Per ulteriori dettagli, consulta la sezione Operazioni e configurazioni.
- La gestione e la manutenzione dei certificati sono 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'attivazione 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 chiave/certificato foglia di un nodo Cassandra, firmala, archiviala in un keystore e configura Cassandra per mTLS facoltativo. Ripeti i passaggi per ogni nodo Cassandra uno alla volta.
- Crea una coppia di chiave/certificato foglia di un'applicazione client, firmala, archiviala in un archivio chiavi e configura l'applicazione client per mTLS. Ripeti i passaggi per ogni applicazione client una alla volta. Applicazioni client:
- edge-management-server
- edge-message-processor
- edge-router
Questi passaggi sono descritti in dettaglio di seguito:
Acquisire 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 root e intermedi in un truststore. Per comandi utili, consulta l'appendice 1. I comandi successivi presuppongono che tu abbia accesso ai seguenti file:
intermediate.key
- file della chiave per il certificato intermedio per la firma dei certificati end-entityintermediate-cert.pem
- certificato intermedio
Configura i nodi Cassandra
- Scegli un nodo Cassandra
- Genera una coppia di chiave e certificato foglia e firmala con il certificato intermedio. Memorizza la chiave e il certificato firmato in un keystore. 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 keystore e truststore in una posizione specifica del nodo e assicurati che siano accessibili all'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
Inoltre, per i sistemi operativi abilitati per FIPS, aggiungi la seguente proprietà al file
/opt/apigee/customer/application/cassandra.properties
:conf_cassandra_client_encryption_protocol=TLSv1.2
Assicurati che il file sia di proprietà dell'utente Apigee e che sia leggibile:
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 chiave e certificato foglia e firmala con il certificato intermedio. Memorizza la chiave e il certificato firmato in un keystore. 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 keystore e truststore in una posizione specifica del nodo e assicurati che siano accessibili all'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.properties
Processore di gestione /opt/apigee/customer/application/message-processor.properties
Router /opt/apigee/customer/application/router.properties
Aggiungi le seguenti configurazioni nel 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
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 una alla volta.
Operazioni e configurazioni
Applicare mTLS
Quando mTLS non è applicato in Cassandra, Cassandra accetta connessioni in testo normale dai client o dai client con cui può eseguire correttamente un handshake TLS bidirezionale. Affinché l'applicazione di mTLS funzioni, mTLS deve essere configurato prima in Cassandra. Per impostare l'applicazione di mTLS in Cassandra, segui questi passaggi:
- 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 sia leggibile
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 applicata 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) e procedi nel seguente modo:
- Creare o modificare 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 del certificato contenente la catena di certificati radice e intermediuserkey
: la chiave client da utilizzare con cqlsh. Deve trattarsi di 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 chiave/un certificato foglia che puoi generare e firmare con il certificato intermedio.
- Esegui il comando
cqlsh
come 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>
Disattivare l'applicazione di mTLS su Cassandra
Per disattivare l'applicazione di mTLS in Cassandra:
- 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 sia leggibile
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.
Disattivare mTLS nativo
La disattivazione di mTLS nativo è un processo in più passaggi, simile all'attivazione di mTLS nativo. I passaggi di alto livello sono:
- Disattiva l'applicazione di mTLS in Cassandra (se applicata)
- Disattiva 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.properties
Processore di gestione /opt/apigee/customer/application/message-processor.properties
Router /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:
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, una alla volta.
- Disattiva 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 sia leggibile
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Configura e riavvia il nodo Cassandra
- Ripeti i passaggi da #a a #c su ciascun 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 descritti in Configurare le applicazioni client:
- 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 farlo in più passaggi:
- Disabilita mTLS nativo di Cassandra nel cluster.
- Utilizza i nuovi certificati radice e intermedi per generare certificati foglia o applicazione nuovi di zecca.
- Segui i passaggi per abilitare mTLS nativo di Cassandra utilizzando il nuovo insieme 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'attivazione o la disattivazione dell'autenticazione Cassandra e così via, assicurati che mTLS non sia applicato in Cassandra. Se hai applicato mTLS, disattiva l'applicazione prima di procedere con queste operazioni.
Appendice 1
I passaggi descritti in questo appendice possono essere seguiti per generare una coppia di chiavi/certificati radice e intermedi autofirmati e per aggiungere questa catena di certificati a un truststore.Genera 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
Genera 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: Configurazione alternativa della concatenazione dei certificati
Sebbene questo articolo consigli una particolare configurazione di concatenamento dei 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 possono avere un set radice/intermedio separato per la firma dei certificati foglia dell'applicazione. Queste configurazioni sono fattibili, ma comportano l'aggiunta della catena di certificati radice/intermedi all'archivio attendibile appropriato. In questo esempio, i truststore 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 truststore.
- Come sopra, puoi avere più set di certificati radice e intermedi per regioni diverse, ma tutti i client in tutte le regioni e tutti i server in tutte le regioni devono essere a conoscenza di tutte le catene radice e intermedie aggiungendole tutte nell'archivio attendibile configurato.