Aktifkan enkripsi internode Cassandra

Enkripsi antarnode (atau node ke node) melindungi data yang berpindah antarnode dalam cluster menggunakan TLS. Halaman ini menjelaskan cara mengaktifkan enkripsi antarnode Cassandra menggunakan TLS di Edge untuk Private Cloud. Untuk melakukan langkah-langkah ini, Anda harus memahami detail cincin Cassandra.

Mengaktifkan enkripsi antarnode Cassandra

Ikuti langkah-langkah berikut untuk mengaktifkan enkripsi antarnode Cassandra:

  1. Buat sertifikat server dengan mengikuti langkah-langkah di Lampiran untuk membuat kunci dan sertifikat yang ditandatangani sendiri.

    Jika Anda menggunakan Edge for Private Cloud di sistem operasi yang mendukung FIPS, gunakan BouncyCastle FIPS Keystore (BCFKS). Lihat Lampiran di bawah untuk mendapatkan tips tentang cara menggunakan keystore jenis BCFKS.

    Langkah-langkah berikut mengasumsikan bahwa Anda telah membuat keystore.node0 dan truststore.node0, serta sandi keystore dan truststore, seperti yang dijelaskan dalam Lampiran. Keystore dan truststore harus dibuat sebagai langkah awal pada setiap node sebelum melanjutkan ke langkah berikutnya.

  2. Tambahkan properti berikut ke file /opt/apigee/customer/application/cassandra.properties. Jika file tidak ada, buat file tersebut.
    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. Pastikan file cassandra.properties dimiliki oleh pengguna apigee:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties
    

Jalankan langkah-langkah berikut di setiap node Cassandra, satu per satu, sehingga perubahan akan diterapkan tanpa menyebabkan periode nonaktif bagi pengguna:

  1. Hentikan layanan Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  2. Mulai ulang layanan Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  3. Untuk menentukan apakah layanan enkripsi TLS telah dimulai, periksa log sistem untuk menemukan pesan berikut:
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

Lakukan rotasi sertifikat

Untuk merotasi sertifikat, ikuti langkah-langkah berikut:

  1. Tambahkan sertifikat untuk setiap pasangan kunci unik yang dihasilkan (lihat Lampiran) ke truststore node Cassandra yang ada, sehingga sertifikat lama dan sertifikat baru ada di truststore yang sama:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE
    

    dengan NEW_ALIAS adalah string unik untuk mengidentifikasi entri, CERT adalah nama file sertifikat yang akan ditambahkan, dan EXISTING_TRUSTSTORE adalah nama truststore yang ada di node Cassandra.

  2. Gunakan utilitas salinan, seperti scp, untuk mendistribusikan truststore ke semua node Cassandra di cluster, yang akan menggantikan truststore yang ada dan digunakan oleh setiap node.
  3. Lakukan mulai ulang bertahap cluster untuk memuat truststore baru dan membangun kepercayaan untuk kunci baru sebelum kunci tersebut diterapkan:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
    
  4. Pada setiap node Cassandra dalam cluster, perbarui properti yang ditampilkan di bawah ke nilai keystore baru di file cassandra.properties:
    conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
      

    dengan NEW_KEYSTORE_PATH adalah jalur ke direktori tempat file keystore berada dan NEW_KEYSTORE_PASSWORD adalah sandi keystore yang ditetapkan saat sertifikat dibuat, seperti yang dijelaskan dalam Lampiran.

  5. Hentikan layanan Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  6. Mulai ulang layanan Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  7. Jika komunikasi berhasil dibuat di antara semua node, lanjutkan ke node Cassandra berikutnya. Catatan: Hanya lanjutkan ke node berikutnya jika komunikasi berhasil dilakukan di antara semua node.

Lampiran

Contoh berikut menjelaskan cara menyiapkan sertifikat server yang diperlukan untuk melakukan langkah-langkah enkripsi antarnode. Perintah yang ditampilkan dalam contoh menggunakan parameter berikut:

Parameter Deskripsi
node0 String unik apa pun untuk mengidentifikasi node.
keystore.node0 Nama keystore. Perintah mengasumsikan bahwa file ini berada di direktori saat ini.
keypass Keypass harus sama untuk keystore dan kunci.
dname Mengidentifikasi alamat IP node0 sebagai 10.128.0.39.
-validity Nilai yang ditetapkan pada flag ini membuat pasangan kunci yang dihasilkan valid selama 10 tahun.
  1. Buka direktori berikut:
    cd /opt/apigee/data/apigee-cassandra
  2. Jalankan perintah berikut untuk membuat file bernama keystore.node0 di direktori saat ini:
    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"

    Penting: Pastikan sandi kunci sama dengan sandi keystore.

  3. Ekspor sertifikat ke file terpisah:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. Pastikan file hanya dapat dibaca oleh pengguna apigee dan tidak ada orang lain:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. Impor sertifikat yang dihasilkan node0.cer ke truststore node:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    Perintah di atas meminta Anda untuk menetapkan sandi. Sandi ini adalah sandi truststore dan mungkin berbeda dengan sandi keystore yang Anda tetapkan sebelumnya. Jika diminta untuk memercayai sertifikat, masukkan yes.

  6. Gunakan openssl untuk membuat file PEM sertifikat tanpa kunci. Perhatikan bahwa cqlsh tidak berfungsi dengan sertifikat dalam format yang dibuat.
    $ 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. Untuk enkripsi node ke node, salin file node0.cer ke setiap node dan impor ke truststore setiap node.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. Gunakan keytool -list untuk memeriksa sertifikat dalam file keystore dan truststore:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0

Menggunakan keystore BCFKS untuk sistem operasi yang mendukung FIPS

Saat menggunakan sistem operasi yang mengaktifkan FIPS, gunakan Keystore FIPS BouncyCastle (BCFKS). Bagian di bawah ini menjelaskan cara menggunakan keystore jenis BCFKS. Langkah-langkah lain untuk menggunakan keystore (seperti kepemilikan file, lokasi file, dan lainnya) tetap sama seperti yang disebutkan dalam lampiran ini.

Untuk membuat keystore jenis BCFKS, gunakan perintah di bawah ini:

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

Catatan: Sandi keystore dan sandi kunci harus sama.

Catatan: Jar bc-fips yang dikirim oleh Apigee dapat digunakan, atau jar yang sama dapat didownload dari repositori BouncyCastle. Lihat dokumentasi BouncyCastle untuk mengetahui detail selengkapnya tentang cara membuat keystore BCFKS.

Ekspor sertifikat ke file terpisah:

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

Impor sertifikat node0.cer yang dihasilkan ke truststore node:

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