Włącz szyfrowanie węzła Cassandra

Szyfrowanie między węzłami (czyli między węzłami) chroni dane przesyłane między węzłami w klastrze. korzysta z protokołu TLS. Na tej stronie objaśniamy, jak włączyć szyfrowanie między węzłami Cassandra za pomocą protokołu TLS w Edge dla Chmura prywatna. Aby wykonać te czynności, musisz znać szczegóły dotyczące Twojego klastra Cassandra.

Włącz szyfrowanie interwęzła Cassandra

Aby włączyć szyfrowanie między węzłami Cassandra, wykonaj te czynności:

  1. Wygeneruj certyfikaty serwera, wykonując czynności opisane w Dodatku w celu utworzenia samodzielnie podpisanego klucza i certyfikatu.

    Jeśli używasz Edge for Private Cloud w systemie operacyjnym obsługującym FIPS, użyj repozytorium kluczy BouncyCastle FIPS (BCFKS). Wskazówki dotyczące pracy z kluczowym magazynem typu BCFKS znajdziesz w załączniku poniżej.

    W przypadku tych czynności zakładamy, że masz utworzone pliki keystore.node0truststore.node0, a także hasła do plików kluczy i poufnych plików kluczy zgodnie z opisem w załączniku. Magazyn kluczy i magazyn zaufania należy utworzyć w ramach czynności wstępnych w każdym węźle, zanim przejdziesz do kolejnych kroków.

  2. Dodaj do pliku /opt/apigee/customer/application/cassandra.properties te właściwości. Jeśli plik nie istnieje, utwórz go.
    conf_cassandra_server_encryption_internode_encryption=all
    conf_cassandra_server_encryption_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0
    conf_cassandra_server_encryption_keystore_password=keypass
    conf_cassandra_server_encryption_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0
    conf_cassandra_server_encryption_truststore_password=trustpass
        
    # Optionally set the following to enable 2-way TLS or mutual TLS
    conf_cassandra_server_encryption_require_client_auth=true
      
    # Set the following in FIPS enabled operating systems
    # With FIPS, older TLS protocols are disabled, so set to TLSv1.2
    conf_cassandra_server_encryption_protocol=TLSv1.2
    # With FIPS, use BCFKS keystores
    conf_cassandra_server_encryption_store_type=BCFKS
      
  3. Upewnij się, że plik cassandra.properties jest własnością użytkownika apige:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties
    

Wykonaj podane niżej czynności na każdym węźle Cassandra po kolei, aby zmiany zaczęły obowiązywać bez powodowania przerw w działaniu usługi dla użytkowników:

  1. Zatrzymaj usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  2. Ponownie uruchom usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  3. Aby sprawdzić, czy usługa szyfrowania TLS została uruchomiona, sprawdź dzienniki systemowe pod kątem tego komunikatu:
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

Wykonaj rotację certyfikatu

Aby rotować certyfikaty:

  1. Dodaj certyfikat dla każdej unikalnej pary kluczy (patrz Dodatek) do magazynu zaufania istniejącego węzła Cassandra, tak aby zarówno stare, jak i nowe certyfikaty znajdowały się w tym samym magazynie zaufania:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE
    

    gdzie NEW_ALIAS to unikalny ciąg znaków identyfikujący wpis, CERT to nazwa pliku certyfikatu do dodania, a EXISTING_TRUSTSTORE to nazwa istniejącego repozytorium zaufania na węźle Cassandra.

  2. Użyj narzędzia do kopiowania, takiego jak scp, aby rozdzielić magazyn zaufania na wszystkie węzły Cassandra w klastrze, zastępując dotychczasowy magazyn zaufania używany przez każdy węzeł.
  3. Wykonaj kroczące ponowne uruchomienie klastra, aby wczytać nowy magazyn zaufania i określić zaufanie do nowych kluczy, zanim zostaną wdrożone:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
    
  4. W każdym węźle Cassandra w klastrze zaktualizuj poniższe właściwości do nowych wartości magazynu kluczy z pliku cassandra.properties:
    conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
      

    gdzie NEW_KEYSTORE_PATH to ścieżka do katalogu, w którym znajduje się plik magazynu kluczy, a NEW_KEYSTORE_PASSWORD to hasło do magazynu kluczy ustawione podczas tworzenia certyfikatów, zgodnie z opisem w dodatku.

  5. Zatrzymaj usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  6. Ponownie uruchom usługę Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  7. Po nawiązaniu komunikacji między wszystkimi węzłami przejdź do następnego węzła Cassandra. Uwaga: do następnego węzła należy przejść tylko po nawiązaniu komunikacji między wszystkimi węzłami.

Dodatek

Poniższy przykład pokazuje, jak przygotować certyfikaty serwera potrzebne do wykonania kroków szyfrowania między węzłami. Polecenia podane w przykładzie mają następujące parametry:

Parametr Opis
node0 Dowolny niepowtarzalny ciąg identyfikujący węzeł.
keystore.node0 Nazwa klucza. W poleceniach zakłada się, że ten plik znajduje się w bieżącym katalogu.
keypass Klucz dostępu musi być taki sam w przypadku magazynu kluczy i klucza.
dname Adres IP node0 jest identyfikowany jako 10.128.0.39.
-validity Wartość ustawiona na tej flagie sprawia, że wygenerowana para kluczy jest ważna przez 10 lat.
  1. Przejdź do tego katalogu:
    cd /opt/apigee/data/apigee-cassandra
  2. Aby wygenerować plik o nazwie keystore.node0 w bieżącym katalogu, uruchom to polecenie:
    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 klucza.

  3. Wyeksportuj certyfikat do osobnego pliku:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. Upewnij się, że plik jest czytelny tylko dla użytkownika Apigee i dla nikogo innego:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. Zaimportuj wygenerowany certyfikat node0.cer do magazynu zaufania węzła:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    W ramach powyższego polecenia musisz ustawić hasło. Jest to hasło do repozytorium zaufania i może być inne niż hasło do repozytorium kluczy ustawione wcześniej. Jeśli pojawi się prośba o zaakceptowanie certyfikatu, wpisz yes.

  6. Użyj openssl, aby wygenerować plik PEM certyfikatu bez kluczy. Pamiętaj, że cqlsh nie 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
  7. W przypadku szyfrowania między węzłami skopiuj plik node0.cer do każdego węzła i zaimportuj go do magazynu zaufania każdego węzła.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. Za pomocą keytool -list możesz sprawdzać certyfikaty w magazynie kluczy i plikach magazynu zaufania:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0

Praca z magazynami kluczy BCFKS w systemach operacyjnych obsługujących FIPS

W przypadku pracy z systemami operacyjnymi obsługującymi standard FIPS używaj magazynów kluczy FIPS BouncyCastle (BCFKS). W sekcji poniżej opisano, jak pracować z kluczowymi magazynami typu BCFKS. Inne kroki związane z pracą z magazynami kluczy (takie jak własność pliku czy lokalizacja pliku) pozostają takie same, jak opisano w tym dodatku.

Aby wygenerować magazyn kluczy typu BCFKS, użyj tego polecenia:

keytool -genkeypair -keyalg RSA -alias node0 -validity 365 -keystore keystore.node0 \
-storepass keypass -keypass keypass -v \
-dname "EMAILADDRESS=youremail@domain.com, CN=yourcn, OU=yourou, O=youro, L=yourl, C=yourc" \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS

Uwaga: hasło magazynu kluczy i hasło klucza powinny być takie same.

Uwaga: możesz użyć pliku jar bc-fips wysyłanego przez Apigee lub ten sam plik jar można pobrać z Repozytoria BouncyCastle. Więcej informacji o generowaniu magazynu kluczy BCFKS znajdziesz w dokumentacji BouncyCastle.

Wyeksportuj certyfikat do osobnego pliku:

keytool -export -v -alias node0 -file node0.cer -keystore keystore.node0 -storepass keypass \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS

Zaimportuj wygenerowany certyfikat node0.cer do magazynu zaufania węzła:

keytool -import -v -alias node0 -file node0.cer -keystore truststore.node0 -storepass storepass \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS