הפעלת הצפנה של אינטראקציה ב-Cassandra

ההצפנה בין צמתים (או מצומת לצומת) מגנה על נתונים שעוברים בין צמתים באשכול באמצעות TLS. בדף זה נסביר איך מפעילים הצפנה של צמתים מחוברים ב-Cassandra באמצעות TLS ב-Edge בענן פרטי. כדי לבצע את השלבים האלה, עליכם להכיר את פרטי הטבעת של Cassandra.

הפעלה של הצפנת internode של Cassandra

כדי להפעיל את ההצפנה ההדדית של Cassandra, צריך לבצע את התהליך שבהמשך בכל הצמתים באשכול. עליך להפיץ אישורים ציבוריים של כל צומת לכל הצמתים. לאחר מכן, כל צומת יכיל אישורים node0.cer, node1.cer וכו' ב-Truststore שלו. כל צומת יכיל רק מפתח פרטי משלו במאגר המפתחות שלו. לדוגמה, הקוד node0 יכיל רק את הערך node0.pem במאגר המפתחות שלו. צריך להפעיל הצפנה בכל צומת, בנפרד.

כדי להפעיל את ההצפנה של צמתים פנימיים ב-Cassandra, יש לפעול לפי השלבים הבאים:

  1. אפשר ליצור אישורי שרת לפי השלבים שבנספח ליצירת מפתח ואישור בחתימה עצמית.

    השלבים הבאים מבוססים על ההנחה שיצרת את הסיסמאות keystore.node0 ו-truststore.node0, וגם את הסיסמאות ל-Keystore ול-Truststore, כמו שמוסבר בנספח. צריך ליצור את ה-Keystore ואת ה-Truststore כשלבים ראשוניים בכל צומת לפני המשך השלבים הבאים.

  2. מוסיפים את המאפיינים הבאים לקובץ /opt/apigee/customer/application/cassandra.properties. אם הקובץ לא קיים, יוצרים אותו.
    conf_cassandra_internode_encryption=all
    conf_cassandra_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0
    conf_cassandra_keystore_password=keypass
    conf_cassandra_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0
    conf_cassandra_truststore_password=trustpass
    # Optionally set the following to enable 2-way TLS or mutual TLS
    # conf_cassandra_require_client_auth=true
  3. מוודאים שהקובץ cassandra.properties נמצא בבעלות משתמש API:
    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 הופעל, בודקים ביומני המערכת את ההודעה הבאה:
    Starting Encrypted Messaging Service on TLS port

ביצוע סבב אישורים

כדי להחליף אישורים, צריך לפעול לפי השלבים הבאים:

  1. צריך להוסיף את האישור לכל זוג מפתחות ייחודי שנוצר (מידע נוסף בנספח) ל-Truststore של צומת Cassandra, כך שהאישורים הישנים והאישורים החדשים קיימים באותו מאגר מהימנות:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE

    כאשר NEW_ALIAS הוא מחרוזת ייחודית לזיהוי הרשומה, CERT הוא השם של קובץ האישור שצריך להוסיף, ו-EXISTING_TRUSTSTORE הוא השם של ה-Truststore הקיים בצומת Cassandra.

  2. אפשר להשתמש בכלי עזר להעתקה, כמו scp, כדי להפיץ את ה-Truststore לכל הצמתים של Cassandra באשכול, שמחליף את ה-Truststore הקיים שבו נעשה שימוש בכל צומת.
  3. מבצעים הפעלה מחדש הדרגתית של האשכול כדי לטעון את ה-Truststore החדש וליצור אמון במפתחות החדשים לפני שהם נוצרים:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. בכל צומת Cassandra באשכול, צריך לעדכן את המאפיינים שמופיעים בהמשך לערכים החדשים של מאגר המפתחות בקובץ cassandra.properties:
    conf_cassandra_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
    
      

    where NEW_KEYSTORE_PATH is the path to the directory where the keystore file is located and NEW_KEYSTORE_PASSWORD is the keystore password set when the certificates were created, as explained in the Appendix.

  5. Stop the Cassandra service:
    /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 מפתח המפתח (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. יש לוודא שהקובץ קריא למשתמש API בלבד, ואף אחד אחר לא יכול לקרוא אותו:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. מייבאים את האישור שנוצר node0.cer ל-Truststore של הצומת:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    הפקודה שלמעלה תבקש ממך להגדיר סיסמה. זוהי הסיסמה של מאגר המפתחות, והיא יכולה להיות שונה מסיסמה של מאגר המפתחות שהגדרת קודם לכן. אם מופיעה בקשה לתת אמון באישור, מזינים yes.

  6. יש להשתמש ב-Opensl כדי ליצור קובץ 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 כדי לבדוק אם יש אישורים בקובצי Keystore ובקובצי Truststore:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0