Mengonfigurasi mTLS native Cassandra

Pengantar

Berbagai komponen Edge for Private Cloud seperti pemroses pesan, server pengelolaan, dan router terhubung melalui saluran teks biasa ke node Cassandra secara default. Di saluran tersebut, data ke dan dari Cassandra dikomunikasikan dengan jelas. Apigee mTLS adalah fitur berbasis mesh layanan consul yang menambahkan keamanan pada komunikasi antar-komponen di cluster Edge untuk Private Cloud. Penawaran oleh Apigee ini juga menambahkan keamanan TLS melalui saluran komunikasi antara komponen klien dan Cassandra.

Artikel ini membahas penawaran alternatif baru dari Apigee yang mengamankan komunikasi antara komponen klien dan Cassandra di Edge untuk Private Cloud melalui TLS bersama (alias TLS 2 arah) menggunakan fitur yang tersedia secara native di Cassandra tanpa menggunakan mesh layanan eksternal.

Fitur mTLS native

Mengaktifkan mTLS antara Cassandra dan komponen klien yang dijelaskan dalam artikel ini bergantung pada fitur TLS yang disediakan secara native oleh Apache Cassandra. Jika diaktifkan, koneksi klien ke Cassandra (pada port transport native CQL 9042) akan melakukan TLS handshake 2 arah dengan klien sebelum mengizinkan koneksi dibuat. Untuk tujuan koneksi TLS 2 arah ini, Cassandra bertindak sebagai server dan berbagai klien yang terhubung ke Cassandra (seperti edge-message-processor, alat cqlsh, dll.) bertindak sebagai klien.

Untuk TLS 2 arah (atau mutual TLS atau mTLS), Cassandra dan klien harus disiapkan dengan keystore-nya sendiri. Keystore setiap node Cassandra harus berisi kunci dan sertifikatnya sendiri. Keystore setiap aplikasi klien harus berisi kunci dan sertifikat klien tertentu. Truststore yang berisi sertifikat dan rantai terkait dari pihak lain harus ditambahkan di Cassandra dan klien. Truststore setiap node Cassandra harus berisi sertifikat klien dan truststore setiap klien harus berisi sertifikat semua node Cassandra. Anda dapat membaca artikel TLS/SSL Dua Arah Apigee untuk mengetahui informasi selengkapnya tentang cara kerja handshake TLS dua arah secara umum.

Rantai sertifikat

Secara umum, di TLS Dua Arah, sertifikat server, sertifikat klien, rantai sertifikat, keystore, dan truststore dapat dibuat dengan berbagai cara. Hal yang sama juga berlaku untuk mTLS native klien dan Cassandra. Dengan mempertimbangkan cara organisasi biasanya mengoperasikan cluster Edge for Private Cloud dan jumlah pasangan koneksi klien ke Cassandra unik yang dapat dibuat, Apigee merekomendasikan pendekatan umum berikut untuk mengonfigurasi kunci dan sertifikat untuk fitur ini. Ada metode lain yang dapat digunakan, tetapi metode di bawah ini kemungkinan memberikan keseimbangan yang baik antara keamanan dan overhead pemeliharaan.

  1. Dapatkan root certificate dan pasangan kunci/sertifikat perantara yang ditandatangani oleh root. Anda mungkin sudah memiliki kunci dan sertifikat tersebut. Jika belum, Anda dapat membuat root certificate dan intermediate certificate serta kunci yang ditandatangani sendiri menggunakan langkah-langkah di Lampiran 1.

  2. Gunakan kunci/sertifikat perantara umum dari atas untuk menandatangani semua kunci dan sertifikat khusus aplikasi (leaf).

Memiliki sertifikat/kunci perantara umum di seluruh 1 cluster akan membuat truststore umum (yang berisi rantai sertifikat root dan perantara yang sama) dikonfigurasi di setiap node Cassandra dan klien. Setiap node Cassandra dan aplikasi klien mendapatkan sertifikat dan kunci leaf uniknya sendiri yang ditandatangani oleh sertifikat/kunci perantara umum.

  1. Mengganti sertifikat entitas akhir node Cassandra atau aplikasi klien sangat mudah.
  2. Merotasi sertifikat perantara atau root masih merupakan operasi yang cukup rumit, tetapi frekuensi rotasi tersebut akan jauh lebih rendah daripada sertifikat entitas akhir.

Gunakan praktik keamanan organisasi Anda untuk memutuskan apakah akan menggunakan root dan intermediate certificate yang sama di berbagai cluster cloud pribadi. Anda dapat melihat Lampiran 2 untuk penyiapan sertifikat alternatif.

Langkah-langkah selanjutnya dalam artikel ini memberikan detail untuk metodologi di atas dalam mendesain kunci dan sertifikat.

Batasan dan peringatan

Batasan berikut berlaku untuk fitur ini.

  • Penawaran mTLS native antara komponen klien dan Cassandra ini TIDAK kompatibel dengan apigee-mtls. Jika Anda menggunakan fitur ini, Anda tidak dapat menggunakan apigee-mtls dan sebaliknya.
  • Mengaktifkan mTLS antara komponen klien dan Cassandra akan berdampak pada performa koneksi yang dibuat antara klien dan Cassandra. Operasi seperti booting klien atau penskalaan koneksi Cassandra mungkin lebih lambat karena Cassandra dan klien harus menegosiasikan TLS terlebih dahulu sebelum memulai komunikasi. Dampaknya akan kecil dan umumnya tidak terlihat.
  • Di Cassandra, mTLS dapat diterapkan secara opsional pada koneksi klien masuk. Meskipun penerapan dapat diaktifkan, penerapan harus dinonaktifkan selama tugas operasional seperti upgrade software Apigee, mengaktifkan/menonaktifkan fitur TLS, dan jenis rotasi sertifikat tertentu. Lihat bagian Operasi dan Konfigurasi untuk mengetahui detail selengkapnya.
  • Pengelolaan dan pemeliharaan sertifikat adalah tanggung jawab pelanggan.
  • Merotasi sertifikat memiliki berbagai nuansa. Lihat bagian Rotasi Sertifikat untuk mengetahui detail selengkapnya

Mengaktifkan mTLS native

Secara garis besar, mengaktifkan mTLS native adalah prosedur 3 langkah seperti yang dijelaskan di bawah:

  1. Dapatkan sertifikat root dan pasangan kunci/sertifikat perantara.
  2. Buat pasangan kunci/sertifikat leaf dari 1 node Cassandra, tanda tangani, simpan di keystore, dan konfigurasi Cassandra untuk mTLS opsional. Ulangi langkah-langkah untuk setiap node Cassandra satu per satu.
  3. Buat pasangan kunci/sertifikat leaf dari 1 aplikasi klien, tanda tangani, simpan di keystore, dan konfigurasi aplikasi klien untuk mTLS. Ulangi langkah-langkah pada setiap aplikasi klien satu per satu. Aplikasi klien:
    1. edge-management-server
    2. edge-message-processor
    3. edge-router

Langkah-langkah ini dijelaskan di bawah:

Mendapatkan sertifikat root dan perantara

Dapatkan sertifikat root dan pasangan kunci/sertifikat perantara yang ditandatangani oleh root. Gunakan sertifikat root dan intermediate certificate yang ditandatangani CA organisasi Anda atau buat sertifikat yang ditandatangani sendiri. Simpan root dan rantai intermediate certificate di truststore. Lihat Lampiran 1 untuk mengetahui perintah yang berguna. Perintah berikutnya mengasumsikan Anda memiliki akses ke file berikut:

  • intermediate.key - file kunci untuk sertifikat perantara untuk menandatangani sertifikat entitas akhir
  • intermediate-cert.pem- intermediate certificate

Mengonfigurasi node Cassandra

  1. Pilih satu node Cassandra
  2. Buat pasangan kunci dan sertifikat leaf, lalu tandatangani dengan sertifikat perantara. Simpan kunci dan sertifikat yang ditandatangani ke dalam keystore. Contohnya:
    
    # 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

    Tempatkan file keystore dan truststore di lokasi tertentu pada node dan pastikan file tersebut dapat diakses oleh pengguna 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

  3. Buat atau edit file /opt/apigee/customer/application/cassandra.properties. Tambahkan konten berikut dalam file ini:
    ### 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
    

    Pastikan file dimiliki dan dapat dibaca oleh pengguna apigee:

    chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
  4. Mengonfigurasi dan memulai ulang node Cassandra
    apigee-service apigee-cassandra configure
    apigee-service apigee-cassandra restart
    
  5. Ulangi langkah-langkah di atas pada setiap node Cassandra satu per satu

Mengonfigurasi aplikasi klien

Bagian ini berlaku untuk komponen klien berikut yang terhubung ke Cassandra:

  • edge-management-server
  • edge-message-processor
  • router tepi

  1. Pilih satu komponen klien
  2. Buat pasangan kunci dan sertifikat leaf, lalu tanda tangani dengan intermediate certificate. Simpan kunci dan sertifikat yang ditandatangani ke keystore. Contohnya:
    
    # 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
    

    Tempatkan file keystore dan truststore di lokasi tertentu pada node dan pastikan file tersebut dapat diakses oleh pengguna 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

  3. Buat dan edit file konfigurasi berdasarkan aplikasi yang Anda konfigurasi
    Aplikasi File konfigurasi
    Server pengelolaan /opt/apigee/customer/application/management-server.properties
    Prosesor pengelolaan /opt/apigee/customer/application/message-processor.properties
    Router /opt/apigee/customer/application/router.properties

    Tambahkan konfigurasi berikut dalam 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
    

    Pastikan file konfigurasi dimiliki dan dapat dibaca oleh pengguna apigee

    chown apigee:apigee configuration file
    
    ### Example:
    chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    

  4. Mulai ulang aplikasi klien
    # 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
    
  5. Anda dapat memvalidasi bahwa SSL telah dikonfigurasi dengan benar di aplikasi klien dengan mencari log di sepanjang baris di bawah ini dalam log sistem aplikasi yang sesuai:

    Opsi SSL ditambahkan ke koneksi cassandra

  6. Ulangi langkah-langkah di atas pada setiap aplikasi klien satu per satu

Operasi dan konfigurasi

Menerapkan mTLS

Jika mTLS tidak diterapkan di Cassandra, Cassandra akan menerima koneksi teks biasa dari klien atau klien yang dapat berhasil melakukan TLS handshake 2 arah. Agar penerapan mTLS berfungsi, mTLS harus dikonfigurasi terlebih dahulu di Cassandra. Anda dapat menetapkan penerapan mTLS di Cassandra dengan mengikuti langkah-langkah di bawah:

  1. Pilih satu node Cassandra
  2. Buat atau edit file /opt/apigee/customer/application/cassandra.properties. Tambahkan atau edit properti berikut dalam file ini:
    ### Optional TLS - true or false
    conf_cassandra_client_encryption_optional=false
    

    Memastikan file dimiliki dan dapat dibaca oleh pengguna apigee

    chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
    
  3. Mengonfigurasi dan memulai ulang node Cassandra
    apigee-service apigee-cassandra configure
    apigee-service apigee-cassandra restart
    
  4. Ulangi langkah-langkah di atas pada setiap node Cassandra satu per satu

Setelah mTLS diterapkan di Cassandra, alat kueri Cassandra standar cqlsh tidak dapat terhubung ke Cassandra secara langsung. Untuk mengonfigurasi cqlsh untuk SSL, buat kunci dan sertifikat entitas akhir baru (mirip dengan kunci dan sertifikat entitas akhir untuk aplikasi klien) dan lakukan hal berikut:

  1. Membuat atau mengedit file $HOME/.cassandra/cqlshrc
  2. Tambahkan konten berikut ke 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 sertifikat yang berisi root certificate dan intermediate certificate chain
    • userkey - kunci klien yang akan digunakan oleh cqlsh. Ini harus berupa pasangan kunci/sertifikat leaf yang dapat Anda buat dan tanda tangani dengan intermediate certificate.
    • usercert - sertifikat klien yang akan digunakan oleh cqlsh. Kunci/sertifikat ini harus berupa kunci/sertifikat leaf yang dapat Anda buat dan tanda tangani dengan intermediate certificate.
  3. Jalankan perintah cqlsh seperti biasa sambil memberikan argumen --ssl. Misalnya:
    $  /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>
    

Menonaktifkan penerapan mTLS di Cassandra

Untuk menonaktifkan penerapan mTLS di Cassandra, ikuti langkah-langkah di bawah:

  1. Pilih satu node Cassandra
  2. Buat atau edit file /opt/apigee/customer/application/cassandra.properties. Tambahkan atau edit properti berikut dalam file ini:
    ### Optional TLS - true or false
    conf_cassandra_client_encryption_optional=true
    

    Pastikan file dimiliki dan dapat dibaca oleh pengguna apigee

    chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
    
  3. Mengonfigurasi dan memulai ulang node Cassandra
    apigee-service apigee-cassandra configure
    apigee-service apigee-cassandra restart
    
  4. Ulangi langkah-langkah di atas pada setiap node Cassandra satu per satu

Menonaktifkan mTLS native

Menonaktifkan mTLS native adalah proses multi-langkah, mirip dengan mengaktifkan mTLS native. Langkah-langkah tingkat tingginya adalah:

  1. Nonaktifkan penerapan mTLS di Cassandra (Jika diterapkan)
  2. Nonaktifkan mTLS di semua node aplikasi klien berikut satu per satu:
    • edge-management-server
    • edge-message-processor
    • router tepi
    1. Buat dan edit file konfigurasi berdasarkan aplikasi yang Anda konfigurasi:
      Aplikasi File konfigurasi
      Server pengelolaan /opt/apigee/customer/application/management-server.properties
      Prosesor pengelolaan /opt/apigee/customer/application/message-processor.properties
      Router /opt/apigee/customer/application/router.properties
    2. Tambahkan atau edit properti berikut dalam file konfigurasi:
      ### TLS on CQL connections
      conf_cassandra_sslconfig.enable.tls=false
      conf_cassandra_sslconfig.enable.mtls=false
      
    3. Pastikan file konfigurasi dimiliki dan dapat dibaca oleh pengguna apigee:
      chown apigee:apigee configuration file
      
      ### Example:
      chown apigee:apigee /opt/apigee/customer/application/management-server.properties
    4. Mulai ulang aplikasi klien:
      
      # 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
      
    5. Ulangi langkah #a hingga #d di setiap aplikasi klien, satu per satu.
  3. Nonaktifkan mTLS di semua node Cassandra satu per satu:
    1. Pilih satu node Cassandra.
    2. Buat atau edit file /opt/apigee/customer/application/cassandra.properties. Tambahkan atau edit properti berikut dalam file ini:
      ### Cassandra TLS on CQL connections
      conf_cassandra_client_encryption_enabled=false
      

      Pastikan file dimiliki dan dapat dibaca oleh pengguna apigee

      chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
      
    3. Mengonfigurasi dan memulai ulang node Cassandra
    4. apigee-service apigee-cassandra configure
      apigee-service apigee-cassandra restart
      
    5. Ulangi langkah #a hingga #c pada setiap node Cassandra, satu per satu.

Rotasi sertifikat

Rotasi hanya untuk sertifikat Leaf (mempertahankan sertifikat Intermediate dan Root yang sama)

Langkah-langkah yang serupa dengan Mengonfigurasi aplikasi klien dapat diikuti:

  1. Membuat kunci/sertifikat leaf baru untuk aplikasi menggunakan kunci/sertifikat perantara yang sama
  2. Konfigurasi jalur ke kunci/sertifikat leaf baru di aplikasi beserta sandi dan jenis keystore
  3. Memulai ulang aplikasi
Rotasi untuk sertifikat Root atau Intermediate

Jika Anda berencana untuk merotasi sertifikat perantara atau root, sebaiknya lakukan ini sebagai proses multi-langkah:

  1. Nonaktifkan mTLS native Cassandra di seluruh cluster Anda.
  2. Gunakan sertifikat root dan perantara baru untuk membuat sertifikat aplikasi atau leaf baru.
  3. Ikuti langkah-langkah untuk mengaktifkan mTLS native Cassandra menggunakan kumpulan kunci dan sertifikat baru.

Operasi Apigee Umum

Untuk melakukan operasi Apigee umum seperti mengupgrade software Apigee, menambahkan atau menghapus node Cassandra, menambahkan atau menghapus pusat data, mengaktifkan atau menonaktifkan autentikasi Cassandra, dll., pastikan mTLS tidak diterapkan di Cassandra. Jika Anda telah menerapkan mTLS, nonaktifkan penerapan sebelum melanjutkan operasi ini.

Lampiran 1

Langkah-langkah dalam lampiran ini dapat diikuti untuk membuat pasangan kunci/sertifikat perantara dan root yang ditandatangani sendiri serta menambahkan rantai sertifikat ini ke truststore.

Membuat root certificate dan intermediate certificate yang ditandatangani sendiri

# 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

Membuat truststore

# 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

Lampiran 2: Penyiapan rantai sertifikat alternatif

Meskipun artikel ini merekomendasikan penyiapan rantai sertifikat tertentu yang menyeimbangkan keamanan dan kemudahan operasi, ada alternatif lain yang dijelaskan di bawah. Sebagian besar prinsip umum juga berlaku untuk metodologi lain seperti:

  1. Memiliki kunci dan sertifikat entitas akhir langsung untuk setiap node Cassandra atau aplikasi klien (tanpa sertifikat root atau intermediate penandatanganan). Hal ini kemungkinan akan membuat rotasi sertifikat menjadi rumit.
  2. Memiliki beberapa set root dan perantara untuk berbagai kasus penggunaan. Misalnya, node Cassandra memiliki 1 set sertifikat root/intermediate certificate yang digunakan untuk menandatangani semua sertifikat entitas akhir Cassandra. Demikian pula, semua aplikasi klien dapat memiliki satu set root/perantara terpisah untuk menandatangani sertifikat entitas akhir aplikasi. Konfigurasi tersebut dapat dilakukan, tetapi melibatkan penambahan rantai sertifikat root/perantara ke truststore yang sesuai. Dalam contoh ini, truststore Cassandra harus berisi root certificate/intermediate certificate klien dan aplikasi klien harus memiliki rantai root/intermediate node Cassandra di truststore-nya.
  3. Mirip dengan di atas, Anda dapat memiliki beberapa set sertifikat root dan perantara untuk berbagai region, tetapi semua klien di semua region dan semua server di semua region harus mengetahui semua rantai root dan perantara dengan menambahkan semuanya di truststore yang dikonfigurasi.