הצפנה בין צמתים (או מצומת לצומת) מגינה על נתונים שעוברים בין צמתים באשכול באמצעות TLS. בדף הזה מוסבר איך להפעיל הצפנה בין צמתים ב-Cassandra באמצעות TLS ב-Edge for Private Cloud. כדי לבצע את השלבים האלה, צריך להכיר את הפרטים של Cassandra ring.
הפעלת הצפנה בין צמתים ב-Cassandra
כדי להפעיל הצפנה בין צמתים של Cassandra:
כדי ליצור אישורי שרת, פועלים לפי השלבים ליצירת מפתח ואישור בחתימה עצמית שמפורטים בנספח.
בשלבים הבאים אנחנו מניחים שיצרתם את
keystore.node0ו-truststore.node0, וגם את הסיסמאות של מאגר המפתחות ושל ה-truststore, כמו שמוסבר בנספח. לפני שממשיכים לשלבים הבאים, צריך ליצור את מאגר המפתחות ואת ה-truststore כשלבים מקדימים בכל צומת.- מוסיפים את המאפיינים הבאים לקובץ
/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 - מוודאים שהקובץ
cassandra.propertiesנמצא בבעלות של משתמש Apigee: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
- כדי לבדוק אם שירות ההצפנה של TLS התחיל, בודקים אם ההודעה הבאה מופיעה ביומני המערכת:
Internode messaging enabled TLS protocols Internode messaging enabled cipher suites
ביצוע רוטציה של אישורים
כדי להחליף אישורים, פועלים לפי השלבים הבאים:
- מוסיפים את האישור של כל זוג מפתחות ייחודי שנוצר (ראו נספח) ל-truststore של צומת Cassandra קיים, כך שגם האישורים הישנים וגם האישורים החדשים קיימים באותו truststore:
keytool -import -v -trustcacerts -alias NEW_ALIAS \ -file CERT -keystore EXISTING_TRUSTSTORE
כאשר
NEW_ALIASהיא מחרוזת ייחודית לזיהוי הרשומה,CERTהוא שם קובץ האישור שרוצים להוסיף ו-EXISTING_TRUSTSTOREהוא שם מאגר האישורים הקיים בצומת Cassandra. - משתמשים בכלי להעתקה, כמו scp, כדי להפיץ את ה-truststore לכל צומתי Cassandra באשכול, ולהחליף את ה-truststore הקיים שכל צומת משתמש בו.
- מבצעים הפעלה מחדש הדרגתית של האשכול כדי לטעון את מאגר ה-truststore החדש וליצור אמון במפתחות החדשים לפני שהם מוצבים במקום:
/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 |
ה-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ל-truststore של הצומת: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לכל צומת ומייבאים אותו למאגר האישורים של כל צומת.keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
- משתמשים ב-
keytool -listכדי לבדוק אם יש אישורים בקובצי מאגר המפתחות ומאגר האישורים:$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0