تفعيل تشفير الكاساندرا الداخلي

يحمي التشفير بين العقد (أو من عقدة إلى أخرى) البيانات التي يتم نقلها بين العقد في مجموعة باستخدام بروتوكول أمان طبقة النقل (TLS). توضّح هذه الصفحة كيفية تفعيل التشفير بين العقد في Cassandra باستخدام بروتوكول أمان طبقة النقل (TLS) على Edge للخدمة "سحابة خاصة". لتنفيذ هذه الخطوات، يجب أن تكون على دراية بتفاصيل ملف Cassandra ring.

تفعيل تشفير العُقد الداخلي لـ Cassandra

اتبع هذه الخطوات لتمكين تشفير عقدة Cassandra:

  1. أنشِئ شهادات الخادم باتّباع الخطوات الواردة في الملحق لإنشاء مفتاح وشهادة موقعَين ذاتيًا.

    إذا كنت تستخدم Edge for Private Cloud على نظام تشغيل متوافق مع معيار FIPS، استخدِم حِزمة تخزين مفاتيح BouncyCastle FIPS (BCFKS). يُرجى الرجوع إلى الملحق أدناه للحصول على نصائح حول استخدام ملف تخزين المفاتيح من النوع BCFKS.

    تفترض الخطوات التالية أنّك أنشأت keystore.node0 وtruststore.node0، بالإضافة إلى كلمات مرور ملف تخزين المفاتيح وملف تخزين الثقة، كما هو موضّح في الملحق. يجب إنشاء ملف تخزين المفاتيح وملف تخزين الثقة كخطوات أولية في كل عقدة قبل المتابعة إلى الخطوات التالية.

  2. أضِف السمات التالية إلى ملف /opt/apigee/customer/application/cassandra.properties. إذا لم يكن الملف متوفّرًا، أنشِئه.
    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. تأكَّد من أنّ الملف cassandra.properties يملكه مستخدم واجهة برمجة التطبيقات:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties
    

نفِّذ الخطوات التالية على كل عقدة من عقد Cassandra، واحدة تلو الأخرى، حتى يتم تطبيق التغييرات بدون التسبب في أي وقت توقف للمستخدمين:

  1. أوقِف خدمة Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  2. أعِد تشغيل خدمة Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  3. لتحديد ما إذا كانت خدمة تشفير بروتوكول أمان طبقة النقل قد بدأت، تحقَّق من سجلات النظام بحثًا عن الرسالة التالية:
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

إجراء عملية تغيير الشهادات

لتبديل الشهادات، اتّبِع الخطوات التالية:

  1. أضِف شهادة لكل زوج مفتاح فريد تم إنشاؤه (راجِع الملحق) إلى ملف تخزين الثقة الخاص بعقدة Cassandra الحالية، بحيث تتوفّر كلّ من الشهادات القديمة والجديدة في ملف تخزين الثقة نفسه:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE
    

    حيث يكون NEW_ALIAS عبارة عن سلسلة فريدة لتحديد الإدخال، وCERT هو اسم ملف الشهادة الذي يجب إضافته، وEXISTING_TRUSTSTORE هو اسم المخزن الموثوق الحالي في عقدة Cassandra.

  2. استخدِم أداة نسخ، مثل scp، لتوزيع ملف تخزين الثقة على جميع نقاط Cassandra في المجموعة، مع استبدال ملف تخزين الثقة الحالي المستخدَم في كلّ نقطة.
  3. يمكنك إعادة تشغيل المجموعة تدريجيًا لتحميل ملف تخزين الثقة الجديد وإنشاء ثقة للمفاتيح الجديدة قبل وضعها:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
    
  4. في كل عقدة من عقد Cassandra في المجموعة، عدِّل السمات الموضّحة أدناه إلى قيم ملف تخزين المفاتيح الجديد في ملف cassandra.properties:
    conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
      

    حيث يكون NEW_KEYSTORE_PATH هو المسار إلى الدليل الذي يحتوي على ملف تخزين المفاتيح، وNEW_KEYSTORE_PASSWORD هو كلمة مرور ملف تخزين المفاتيح التي تم ضبطها عند إنشاء الشهادات، كما هو موضّح في الملحق.

  5. أوقِف خدمة Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  6. أعِد تشغيل خدمة Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  7. عند إنشاء اتصال بين جميع العقد بنجاح، انتقِل إلى عقدة Cassandra التالية. ملاحظة: لا تنتقل إلى العقدة التالية إلا إذا تمّ الاتصال بنجاح بين جميع العقد.

الملحق

يوضّح المثال التالي كيفية إعداد شهادات الخادم اللازمة لتنفيذ خطوات التشفير بين العقد. تستخدم الأوامر المعروضة في المثال المَعلمات التالية:

المَعلمة الوصف
node0 أي سلسلة فريدة لتحديد العقدة.
keystore.node0 اسم ملف تخزين مفاتيح تفترض الأوامر أنّ هذا الملف متوفّر في الدليل الحالي.
keypass يجب أن يكون مفتاح المرور متطابقًا في كل من ملف تخزين المفاتيح والمفتاح.
dname تحديد عنوان IP الخاص بـ node0 على أنّه 10.128.0.39
-validity القيمة المحدَّدة في هذه العلامة تجعل مفتاحَي التشفير الذي تم إنشاؤهما صالحًا لمدة 10 سنوات.
  1. انتقِل إلى الدليل التالي:
    cd /opt/apigee/data/apigee-cassandra
  2. شغِّل الأمر التالي لإنشاء ملف باسم keystore.node0 في الدليل الحالي:
    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"

    ملاحظة مُهمّة: احرص على أن تكون كلمة مرور المفتاح هي نفسها كلمة مرور ملف تخزين المفاتيح.

  3. تصدير الشهادة إلى ملف منفصل:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. تأكَّد من أنّ الملف مقروء فقط لمستخدم apigee وليس لأي مستخدم آخر:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. استورِد الشهادة التي تم إنشاؤها node0.cer إلى ملف تخزين الثقة للعقدة:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    يطلب منك الأمر أعلاه ضبط كلمة مرور. هذه هي كلمة مرور ملف تخزين الثقة التي يمكن أن تختلف عن كلمة مرور ملف تخزين المفاتيح التي حدّدتها سابقًا. إذا طُلب منك الوثوق في الشهادة، أدخِل yes.

  6. استخدِم openssl لإنشاء ملف PEM للشهادة بدون مفاتيح. يُرجى العلم أنّ cqlsh لا تعمل مع الشهادة بالتنسيق الذي تم إنشاؤه.
    $ 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. لإجراء تشفير من عقدة إلى عُقدة، انسخ ملف node0.cer إلى كل عقدة واستورده إلى Truststore لكل عقدة.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. استخدِم keytool -list للبحث عن الشهادات في ملفّي ملف تخزين المفاتيح وملف تخزين الثقة:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0

العمل مع ملفّات تخزين مفاتيح BCFKS لأنظمة التشغيل المزوّدة ببرنامج FIPS

عند العمل مع أنظمة التشغيل المزوّدة بمعايير FIPS، استخدِم ملفّات تخزين مفاتيح BouncyCastle FIPS (BCFKS). يصف القسم أدناه كيفية العمل مع ملفات تخزين المفاتيح من النوع BCFKS. تظل الخطوات الأخرى للعمل مع ملفّات تخزين المفاتيح (مثل ملكية الملف وموقعه الجغرافي وغيرها) كما هي موضّحة في هذا الملحق.

لإنشاء ملف تخزين مفاتيح من النوع BCFKS، استخدِم الأمر أدناه:

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

ملاحظة: يجب أن تتطابق كلمة مرور ملف تخزين المفاتيح مع كلمة مرور المفتاح.

ملاحظة: يمكن استخدام حزمة bc-fips التي شحّتها Apigee، أو يمكن تنزيل الحزمة نفسها من مستودعات BouncyCastle. راجِع مستندات BouncyCastle للحصول على مزيد من التفاصيل عن كيفية إنشاء ملفات تخزين مفاتيح BCFKS.

تصدير الشهادة إلى ملف منفصل:

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

استورِد الشهادة التي تم إنشاؤها node0.cer إلى ملف تخزين الثقة للعقدة:

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