כברירת מחדל ב-Apigee Edge for Private Cloud 4.54.00, הנתב (Nginx) ומעבד ההודעות (Java 21) מפעילים את TLSv1.2 ו-TLSv1.3. בהתאם לצרכים העסקיים ולשיטות האבטחה שלכם, יכול להיות שתרצו להגביל את הפרוטוקולים המותרים או להפעיל מחדש פרוטוקולים ישנים יותר. במאמר הזה מוסבר איך להגדיר את פרוטוקולי ה-TLS לתנועה צפונה ולתנועה דרומה בנתב ובמעבד ההודעות.
ב-Router, אפשר גם להגדיר את הפרוטוקול למארחים וירטואליים ספציפיים. מידע נוסף זמין במאמר הגדרת גישת TLS ל-API ב-ענן פרטי.
במעבד הבקשות, אפשר להגדיר את הפרוטוקול ל-TargetEndpoint ספציפי. מידע נוסף זמין במאמר הגדרת TLS מ-Edge אל ה-Backend (ענן וענן פרטי).
הגדרת פרוטוקול TLS בנתב
המאפיינים הבאים עוזרים להגדיר את פרוטוקולי ה-TLS הרצויים בנתב לתקשורת צפונה.
כדי להגדיר את פרוטוקול ה-TLS בנתב, מגדירים מאפיינים בקובץ router.properties:
- פותחים את הקובץ
router.propertiesבכלי לעריכת טקסט. אם הקובץ לא קיים, יוצרים אותו:vi /opt/apigee/customer/application/router.properties
- מגדירים את המאפיינים הרצויים:
# Possible values are space-delimited list of: TLSv1 TLSv1.1 TLSv1.2 TLSv1.3 conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2
- שומרים את השינויים.
- מוודאים שקובץ המאפיינים נמצא בבעלות המשתמש
apigee:chown apigee:apigee /opt/apigee/customer/application/router.properties
- מפעילים מחדש את הנתב:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- בודקים את קובץ ה-Nginx
/opt/nginx/conf.d/0-default.confכדי לוודא שהפרוטוקול עודכן כמו שצריך:cat /opt/nginx/conf.d/0-default.conf
מוודאים שהערך של
ssl_protocolsהואTLSv1.2. - אם אתם משתמשים ב-TLS דו-כיווני עם מארח וירטואלי, אתם צריכים להגדיר גם את פרוטוקול ה-TLS במארח הווירטואלי, כמו שמתואר במאמר הגדרת גישת TLS ל-API בענן הפרטי.
הגדרת פרוטוקול TLS במעבד הבקשות
המאפיינים הבאים עוזרים להגדיר את פרוטוקולי ה-TLS הרצויים ב-מעבד בקשות לתקשורת דרומה. בקטע הזה מוסבר גם איך לעבוד עם פרוטוקולים וצפנים מושבתים של TLS.
כדי להגדיר את פרוטוקול ה-TLS במעבד הבקשות, מגדירים מאפיינים בקובץ message-processor.properties:
- פותחים את הקובץ
message-processor.propertiesבכלי לעריכת טקסט. אם הקובץ לא קיים, יוצרים אותו:vi /opt/apigee/customer/application/message-processor.properties
- מגדירים את המאפיינים באמצעות התחביר הבא:
# Possible values are a comma-delimited list of TLSv1, TLSv1.1, TLSv1.2, and TLSv1.3 conf/system.properties+https.protocols=[TLSv1][,TLSv1.1][,TLSv1.2][,TLSv1.3] # Possible values are a comma-delimited list of SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3 # SSLv3 is required conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3[,TLSv1][,TLSv1.1][,TLSv1.2][,TLSv1.3] # Specify the ciphers that the Message Processor supports. (You must separate ciphers with a comma.): conf_message-processor-communication_local.http.ssl.ciphers=cipher[,...]
לדוגמה:
conf/system.properties+https.protocols=TLSv1.2 conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1 conf_message-processor-communication_local.http.ssl.ciphers=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
רשימה מלאה של מאפיינים קשורים זמינה במאמר בנושא הגדרת TLS בין נתב לבין מעבד הודעות.
- שומרים את השינויים.
- מוודאים שקובץ המאפיינים נמצא בבעלות המשתמש
apigee:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- מפעילים מחדש את מעבד הבקשות:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- אם אתם משתמשים ב-TLS דו-כיווני עם הקצה העורפי, הגדירו את פרוטוקול ה-TLS במארח הווירטואלי כמו שמתואר במאמר הגדרת TLS מ-Edge לקצה העורפי (Cloud ו-ענן פרטי).
עבודה עם צפנים ופרוטוקולי TLS ישנים יותר: אם אתם רוצים לעבוד עם צפנים או פרוטוקולים ישנים יותר, עיינו בסעיפים הבאים.
עבודה עם גרסאות ישנות יותר של TLS
ב-Java 21, פרוטוקולי TLS מדור קודם (TLSv1, TLSv1.1 ו-SSLv3) ומפתחות Diffie-Hellman חלשים (DH keySize < 1024) מושבתים כברירת מחדל ב-jdk.tls.disabledAlgorithms. כדי להפעיל אותם, משתמשים באחת מהאפשרויות הבאות:
- אפשרות א': מודרניזציה של פרוטוקולי בק-אנד: מעדכנים את שרתי הבק-אנד כך שיתמכו ב-TLS 1.2 או ב-TLS 1.3, ומוודאים שגודל הפרמטרים של Diffie-Hellman הוא 2,048 ביטים או יותר (
>= 2048ביטים). - אפשרות ב': הפעלה מחדש של פרוטוקולים מדור קודם באמצעות CwC: כדי לשמור על תאימות עם קצוות עורפיים מדור קודם של TLS 1.0 או TLS 1.1, מסירים את
TLSv1, TLSv1.1מ-conf_jvmsecurity_jdk.tls.disabledAlgorithmsב-/opt/apigee/customer/application/message-processor.propertiesבאמצעות קוד עם הגדרה (CwC):# Re-enable TLS 1.0 and TLS 1.1 for legacy backend connectivity conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, TLS_RSA_*, rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature, include jdk.disabled.namedCurves
עבודה עם צפנים סטטיים של RSA
Apigee Edge for Private Cloud בגרסה 4.54.00 פועל ב-Java 21, שבה סטים סטטיים של אלגוריתמים להצפנה (cipher suite) (TLS_RSA_*) ללא חילופי מפתחות זמניים של Diffie-Hellman (ECDHE או DHE) מושבתים כברירת מחדל ב-jdk.tls.disabledAlgorithms (לדוגמה, TLS_RSA_WITH_AES_128_CBC_SHA או TLS_RSA_WITH_AES_256_CBC_SHA). כדי לתמוך בקצוות עורפיים שדורשים סטים סטטיים של אלגוריתמים להצפנה (cipher suite), צריך להשתמש באפשרות הבאה:
- הפעלה מחדש של צפני RSA סטטיים באמצעות CwC: כדי לשמור על תאימות למערכות קצה עורפי מדור קודם, מסירים את
TLS_RSA_*מ-conf_jvmsecurity_jdk.tls.disabledAlgorithmsב-/opt/apigee/customer/application/message-processor.propertiesבאמצעות קוד עם הגדרה (CwC):# Re-enable Static RSA ciphers for backward compatibility with legacy Java 8 backends conf_jvmsecurity_jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature, include jdk.disabled.namedCurves
אחרי שמשנים את המאפיינים, מפעילים מחדש את מעבד ההודעות באמצעות הפקודה
apigee-service:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
הפעלת TLS 1.3 למארחים
בקטע הזה מוסבר איך להפעיל את TLS 1.3 למארחים וירטואליים ספציפיים. כדי להפעיל את TLS 1.3, מבצעים את השלבים הבאים בצמתים של שרת הניהול:
- בכל צומת של שרת ניהול, עורכים את הקובץ
/opt/apigee/customer/application/management-server.propertiesומוסיפים את השורה הבאה (אם הקובץ לא קיים, יוצרים אותו):conf_virtualhost_virtual.host.allowed.protocol.list=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
במקרה של הקובץ הזה, הפרוטוקולים מופרדים באמצעות פסיקים והם תלויי אותיות רישיות.
- שומרים את הקובץ.
- מוודאים שהקובץ נמצא בבעלות המשתמש
apigee:chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- מפעילים מחדש את שרת הניהול:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- חוזרים על השלבים הקודמים בכל הצמתים של Management Server, אחד אחרי השני.
- יוצרים (או מעדכנים) מארח וירטואלי קיים עם המאפיין הבא. שימו לב שהפרוטוקולים מופרדים באמצעות רווחים והם תלויי אותיות רישיות:
"properties": { "property": [ { "name": "ssl_protocols", "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3" } ] }בדוגמה הבאה מוצג vhost לדוגמה עם המאפיין הזה:
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "ssl_protocols", "value": "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }
בדיקת TLS 1.3
כדי לבדוק את TLS 1.3, מזינים את הפקודה הבאה:
curl -v --tlsv1.3 "https://api.myCompany,com/testproxy"
שימו לב שאפשר לבדוק את TLS 1.3 רק בלקוחות שתומכים בפרוטוקול הזה. אם TLS 1.3 לא מופעל, תוצג הודעת שגיאה דומה לזו שבהמשך:
sslv3 alert handshake failure