Szyfrowanie między węzłami chroni dane przesyłane między węzłami w klastrze za pomocą protokołu TLS. Na tej stronie dowiesz się, jak włączyć szyfrowanie między węzłami Cassandra przy użyciu TLS w Edge dla chmury prywatnej. Aby wykonać te czynności, musisz znać szczegóły pierścienia Cassandra.
Włączanie szyfrowania między węzłami Cassandra
Aby włączyć szyfrowanie między węzłami Cassandra, wykonaj poniższą procedurę na wszystkich węzłach w klastrze. Musisz rozpowszechnić certyfikaty publiczne każdego węzła we wszystkich węzłach.
Po wykonaniu tej czynności każdy węzeł będzie zawierać certyfikaty node0.cer, node1.cer itd. w swoim magazynie zaufanych certyfikatów. Każdy węzeł będzie zawierać w magazynie kluczy tylko własny klucz prywatny. Na przykład node0 będzie zawierać tylko node0.pem w swoim magazynie kluczy. Musisz włączyć szyfrowanie na każdym węźle, po kolei.
Aby włączyć szyfrowanie między węzłami Cassandra, wykonaj te czynności:
Wygeneruj certyfikaty serwera, wykonując czynności opisane w dodatku, aby utworzyć podpisany samodzielnie klucz i certyfikat.
W poniższych krokach zakładamy, że masz utworzone pliki
keystore.node0itruststore.node0oraz hasła do magazynu kluczy i magazynu zaufanych certyfikatów, zgodnie z opisem w dodatku. Przed przejściem do kolejnych kroków należy utworzyć magazyn kluczy i magazyn zaufanych certyfikatów jako wstępne kroki w każdym węźle.- Dodaj do pliku
/opt/apigee/customer/application/cassandra.propertieste właściwości. Jeśli plik nie istnieje, utwórz go.conf_cassandra_internode_encryption=all conf_cassandra_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0 conf_cassandra_keystore_password=keypass conf_cassandra_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0 conf_cassandra_truststore_password=trustpass # Optionally set the following to enable 2-way TLS or mutual TLS # conf_cassandra_require_client_auth=true
- Upewnij się, że plik
cassandra.propertiesnależy do użytkownika apigee:chown apigee:apigee \ /opt/apigee/customer/application/cassandra.properties
Wykonaj te czynności na każdym węźle Cassandra, po kolei, aby zmiany zostały wprowadzone bez powodowania przestojów dla użytkowników:
- Zatrzymaj usługę Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Uruchom ponownie usługę Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- Aby sprawdzić, czy usługa szyfrowania TLS została uruchomiona, poszukaj w logach systemowych tego komunikatu:
Starting Encrypted Messaging Service on TLS port
Wykonaj rotację certyfikatu
Aby przeprowadzić rotację certyfikatów, wykonaj te czynności:
- Dodaj certyfikat dla każdej unikalnej wygenerowanej pary kluczy (patrz Dodatek) do magazynu zaufanych certyfikatów istniejącego węzła Cassandra, tak aby zarówno stare, jak i nowe certyfikaty znajdowały się w tym samym magazynie zaufanych certyfikatów:
keytool -import -v -trustcacerts -alias NEW_ALIAS \ -file CERT -keystore EXISTING_TRUSTSTORE
gdzie
NEW_ALIASto unikalny ciąg znaków identyfikujący wpis,CERTto nazwa pliku certyfikatu do dodania, aEXISTING_TRUSTSTOREto nazwa istniejącego magazynu zaufanych certyfikatów w węźle Cassandra. - Użyj narzędzia do kopiowania, takiego jak scp, aby rozpowszechnić magazyn zaufanych certyfikatów we wszystkich węzłach Cassandra w klastrze, zastępując istniejący magazyn zaufanych certyfikatów używany przez każdy węzeł.
- Wykonaj restart kroczący klastra, aby wczytać nowy magazyn zaufanych certyfikatów i ustanowić zaufanie do nowych kluczy, zanim zostaną one wprowadzone:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- W każdym węźle Cassandra w klastrze zaktualizuj właściwości podane poniżej do nowych wartości magazynu kluczy w pliku cassandra.properties:
conf_cassandra_keystore=NEW_KEYSTORE_PATH conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
where
NEW_KEYSTORE_PATHis the path to the directory where the keystore file is located andNEW_KEYSTORE_PASSWORDis the keystore password set when the certificates were created, as explained in the Appendix. - Stop the Cassandra service:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Uruchom ponownie usługę Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- Gdy komunikacja zostanie pomyślnie nawiązana między wszystkimi węzłami, przejdź do następnego węzła Cassandra. Uwaga: przejdź do następnego węzła tylko wtedy, gdy komunikacja między wszystkimi węzłami została nawiązana.
Dodatek
Poniższy przykład pokazuje, jak przygotować certyfikaty serwera potrzebne do wykonania czynności związanych z szyfrowaniem między węzłami. Polecenia pokazane w przykładzie używają tych parametrów:
| Parametr | Opis |
|---|---|
node0 |
Dowolny unikalny ciąg znaków identyfikujący węzeł. |
keystore.node0 |
Nazwa magazynu kluczy. Polecenia zakładają, że ten plik znajduje się w bieżącym katalogu. |
keypass |
Hasło klucza musi być takie samo dla magazynu kluczy i klucza. |
dname |
Identyfikuje adres IP node0 jako 10.128.0.39. |
-validity |
Wartość ustawiona w tej fladze sprawia, że wygenerowana para kluczy jest ważna przez 10 lat. |
- Przejdź do tego katalogu:
cd /opt/apigee/data/apigee-cassandra
- Uruchom to polecenie, aby wygenerować plik o nazwie
keystore.node0w bieżącym katalogu:keytool -genkey -keyalg RSA -alias node0 -validity 3650 \ -keystore keystore.node0 -storepass keypass \ -keypass keypass -dname "CN=10.128.0.39, OU=None, \ O=None, L=None, C=None"
Ważne: upewnij się, że hasło klucza jest takie samo jak hasło magazynu kluczy.
- Wyeksportuj certyfikat do osobnego pliku:
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
- Upewnij się, że plik może odczytać tylko użytkownik apigee i nikt inny:
$ chown apigee:apigee \ /opt/apigee/data/apigee-cassandra/keystore.node0 $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
- Zaimportuj wygenerowany certyfikat
node0.cerdo magazynu zaufanych certyfikatów węzła:keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
Powyższe polecenie poprosi Cię o ustawienie hasła. Jest to hasło do magazynu zaufanych certyfikatów i może się różnić od hasła do magazynu kluczy ustawionego wcześniej. Jeśli pojawi się prośba o uznanie certyfikatu za zaufany, wpisz
yes. - Użyj openssl, aby wygenerować plik PEM certyfikatu bez kluczy. Pamiętaj, że
cqlshnie działa z certyfikatem w wygenerowanym formacie.$ keytool -importkeystore -srckeystore keystore.node0 \ -destkeystore node0.p12 -deststoretype PKCS12 -srcstorepass \ keypass -deststorepass keypass $ openssl pkcs12 -in node0.p12 -nokeys -out node0.cer.pem \ -passin pass:keypass $ openssl pkcs12 -in node0.p12 -nodes -nocerts -out node0.key.pem -passin pass:keypass
- W przypadku szyfrowania między węzłami skopiuj plik
node0.cerdo każdego węzła i zaimportuj go do magazynu zaufanych certyfikatów każdego węzła.keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
- Użyj
keytool -list, aby sprawdzić certyfikaty w plikach magazynu kluczy i magazynu zaufanych certyfikatów:$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0