يحمي التشفير بين العقد (أو من عقدة إلى أخرى) البيانات التي يتم نقلها بين العقد في مجموعة باستخدام بروتوكول أمان طبقة النقل (TLS). توضّح هذه الصفحة كيفية تفعيل التشفير بين العقد في Cassandra باستخدام بروتوكول أمان طبقة النقل (TLS) على Edge للخدمة "سحابة خاصة". لتنفيذ هذه الخطوات، يجب أن تكون على دراية بتفاصيل ملف Cassandra ring.
تفعيل تشفير العُقد الداخلي لـ Cassandra
اتبع هذه الخطوات لتمكين تشفير عقدة Cassandra:
أنشِئ شهادات الخادم باتّباع الخطوات الواردة في الملحق لإنشاء مفتاح وشهادة موقعَين ذاتيًا.
إذا كنت تستخدم Edge for Private Cloud على نظام تشغيل متوافق مع معيار FIPS، استخدِم حِزمة تخزين مفاتيح BouncyCastle FIPS (BCFKS). يُرجى الرجوع إلى الملحق أدناه للحصول على نصائح حول استخدام ملف تخزين المفاتيح من النوع BCFKS.
تفترض الخطوات التالية أنّك أنشأت
keystore.node0
وtruststore.node0
، بالإضافة إلى كلمات مرور ملف تخزين المفاتيح وملف تخزين الثقة، كما هو موضّح في الملحق. يجب إنشاء ملف تخزين المفاتيح وملف تخزين الثقة كخطوات أولية في كل عقدة قبل المتابعة إلى الخطوات التالية.- أضِف السمات التالية إلى ملف
/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
- تأكَّد من أنّ الملف
cassandra.properties
يملكه مستخدم واجهة برمجة التطبيقات:chown apigee:apigee \ /opt/apigee/customer/application/cassandra.properties
نفِّذ الخطوات التالية على كل عقدة من عقد Cassandra، واحدة تلو الأخرى، حتى يتم تطبيق التغييرات بدون التسبب في أي وقت توقف للمستخدمين:
- أوقِف خدمة Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- أعِد تشغيل خدمة Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- لتحديد ما إذا كانت خدمة تشفير بروتوكول أمان طبقة النقل قد بدأت، تحقَّق من سجلات النظام بحثًا عن الرسالة التالية:
Internode messaging enabled TLS protocols Internode messaging enabled cipher suites
إجراء عملية تغيير الشهادات
لتبديل الشهادات، اتّبِع الخطوات التالية:
- أضِف شهادة لكل زوج مفتاح فريد تم إنشاؤه (راجِع الملحق) إلى ملف تخزين الثقة الخاص بعقدة Cassandra الحالية، بحيث تتوفّر كلّ من الشهادات القديمة والجديدة في ملف تخزين الثقة نفسه:
keytool -import -v -trustcacerts -alias NEW_ALIAS \ -file CERT -keystore EXISTING_TRUSTSTORE
حيث يكون
NEW_ALIAS
عبارة عن سلسلة فريدة لتحديد الإدخال، وCERT
هو اسم ملف الشهادة الذي يجب إضافته، وEXISTING_TRUSTSTORE
هو اسم المخزن الموثوق الحالي في عقدة Cassandra. - استخدِم أداة نسخ، مثل scp، لتوزيع ملف تخزين الثقة على جميع نقاط Cassandra في المجموعة، مع استبدال ملف تخزين الثقة الحالي المستخدَم في كلّ نقطة.
- يمكنك إعادة تشغيل المجموعة تدريجيًا لتحميل ملف تخزين الثقة الجديد وإنشاء ثقة للمفاتيح الجديدة قبل وضعها:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- في كل عقدة من عقد 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
هو كلمة مرور ملف تخزين المفاتيح التي تم ضبطها عند إنشاء الشهادات، كما هو موضّح في الملحق. - أوقِف خدمة Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- أعِد تشغيل خدمة Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- عند إنشاء اتصال بين جميع العقد بنجاح، انتقِل إلى عقدة Cassandra التالية. ملاحظة: لا تنتقل إلى العقدة التالية إلا إذا تمّ الاتصال بنجاح بين جميع العقد.
الملحق
يوضّح المثال التالي كيفية إعداد شهادات الخادم اللازمة لتنفيذ خطوات التشفير بين العقد. تستخدم الأوامر المعروضة في المثال المَعلمات التالية:
المَعلمة | الوصف |
---|---|
node0 |
أي سلسلة فريدة لتحديد العقدة. |
keystore.node0 |
اسم ملف تخزين مفاتيح تفترض الأوامر أنّ هذا الملف متوفّر في الدليل الحالي. |
keypass |
يجب أن يكون مفتاح المرور متطابقًا في كل من ملف تخزين المفاتيح والمفتاح. |
dname |
تحديد عنوان IP الخاص بـ node0 على أنّه 10.128.0.39 |
-validity |
القيمة المحدَّدة في هذه العلامة تجعل مفتاحَي التشفير الذي تم إنشاؤهما صالحًا لمدة 10 سنوات. |
- انتقِل إلى الدليل التالي:
cd /opt/apigee/data/apigee-cassandra
- شغِّل الأمر التالي لإنشاء ملف باسم
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"
ملاحظة مُهمّة: احرص على أن تكون كلمة مرور المفتاح هي نفسها كلمة مرور ملف تخزين المفاتيح.
- تصدير الشهادة إلى ملف منفصل:
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
- تأكَّد من أنّ الملف مقروء فقط لمستخدم apigee وليس لأي مستخدم آخر:
$ chown apigee:apigee \ /opt/apigee/data/apigee-cassandra/keystore.node0 $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
- استورِد الشهادة التي تم إنشاؤها
node0.cer
إلى ملف تخزين الثقة للعقدة:keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
يطلب منك الأمر أعلاه ضبط كلمة مرور. هذه هي كلمة مرور ملف تخزين الثقة التي يمكن أن تختلف عن كلمة مرور ملف تخزين المفاتيح التي حدّدتها سابقًا. إذا طُلب منك الوثوق في الشهادة، أدخِل
yes
. - استخدِم 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
- لإجراء تشفير من عقدة إلى عُقدة، انسخ ملف
node0.cer
إلى كل عقدة واستورده إلى Truststore لكل عقدة.keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
- استخدِم
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