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

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

הפעלת הצפנה בין צמתים ב-Cassandra

כדי להפעיל הצפנה בין צמתים של Cassandra:

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

    בשלבים הבאים אנחנו מניחים שיצרתם את keystore.node0 ו-truststore.node0, וגם את הסיסמאות של מאגר המפתחות ושל ה-truststore, כמו שמוסבר בנספח. לפני שממשיכים לשלבים הבאים, צריך ליצור את מאגר המפתחות ואת ה-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
      
  3. מוודאים שהקובץ cassandra.properties נמצא בבעלות של משתמש Apigee:
    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. מוסיפים את האישור של כל זוג מפתחות ייחודי שנוצר (ראו נספח) ל-truststore של צומת Cassandra קיים, כך שגם האישורים הישנים וגם האישורים החדשים קיימים באותו truststore:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE
    

    כאשר NEW_ALIAS היא מחרוזת ייחודית לזיהוי הרשומה, CERT הוא שם קובץ האישור שרוצים להוסיף ו-EXISTING_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_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 ה-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 ל-truststore של הצומת:
    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 לכל צומת ומייבאים אותו למאגר האישורים של כל צומת.
    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