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

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

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

اتّبِع الخطوات التالية لتفعيل التشفير بين العقد في Cassandra:

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

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

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

  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. لتحديد ما إذا كانت خدمة تشفير بروتوكول أمان طبقة النقل (TLS) قد بدأت، تحقق من سجلات النظام للرسالة التالية:
    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، لتوزيع Truststore على جميع عُقد Cassandra في المجموعة، مع استبدال Truststore الحالي المستخدَم في كل عقدة.
  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. عندما يتم إنشاء الاتصال بنجاح بين جميع العقد، انتقل إلى عقدة كاساندرا التالية. ملاحظة: لا تنتقل إلى العقدة التالية إلا إذا تمّ الاتصال بنجاح بين جميع العقد.

الملحق

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

المعلمة الوصف
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

    يطلب منك الأمر أعلاه ضبط كلمة مرور. هذه هي كلمة مرور Truststore ويمكن أن عن كلمة مرور ملف تخزين المفاتيح التي ضبطتها سابقًا. إذا طُلب منك الوثوق في الشهادة، أدخِل 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 إلى كل عقدة واستورِده. إلى مخزن الثقة لكل عقدة.
    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