אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
מארח וירטואלי ב-Edge מגדיר את הדומיינים והיציאות שבהם נחשף proxy ל-API, וכתוצאה מכך גם את כתובת ה-URL שבה האפליקציות משתמשות כדי לגשת ל-proxy ל-API.
מארח וירטואלי גם מגדיר אם הגישה ל-proxy ל-API מתבצעת באמצעות פרוטוקול HTTP, או באמצעות פרוטוקול HTTPS מוצפן שמשתמש ב-TLS. כשמגדירים מארח וירטואלי לשימוש ב-HTTPS וב-TLS, יוצרים מארח וירטואלי ב-Edge ומגדירים את המארח הווירטואלי לשימוש במאגר מפתחות ובמאגר אישורים.
מידע נוסף:
- מידע על TLS/SSL
- שימוש ב-TLS עם Edge
- מידע על מארחים וירטואליים
- הגדרת מארחים וירטואליים לענן הפרטי
- הפניה לנכס של מארח וירטואלי
- מאגרי מפתחות ומאגרי אישורים
מה צריך כדי ליצור מארח וירטואלי
לפני שיוצרים מארח וירטואלי, צריך לוודא שיש לכם את הפרטים הבאים:
- שם הדומיין של המארח הווירטואלי שגלוי לכולם. לדוגמה, צריך לדעת אם השם שגלוי לציבור הוא
api.myCompany.com,myapi.myCompany.comוכו'. המידע הזה משמש כשיוצרים את המארח הווירטואלי וגם כשיוצרים את רשומת ה-DNS של המארח הווירטואלי. -
ל-TLS חד-כיווני, צריך ליצור מאגר מפתחות שמכיל את הרכיבים הבאים:
- אישור TLS – אישור שנחתם על ידי רשות אישורים (CA), או שרשרת אישורים שבה האישור האחרון נחתם על ידי רשות אישורים.
- מפתח פרטי – Edge תומך בגדלי מפתחות של עד 2,048 ביט. השימוש בביטוי סיסמה הוא אופציונלי.
- ל-TLS דו-כיווני, צריך מאגר מפתחות ומאגר אישורים כדי להחזיק את אישור הלקוח, ואופציונלית את שרשרת ה-CA של האישור. צריך את מאגר האישורים גם אם האישור חתום על ידי רשות אישורים.
מידע נוסף על יצירת חנויות מפתחות וחנויות אישורים זמין במאמר בנושא חנויות מפתחות וחנויות אישורים.
הגדרה של מארח וירטואלי ל-TLS
כדי ליצור מארח וירטואלי, יוצרים אובייקט XML שמגדיר את המארח הווירטואלי.
אובייקט ה-XML הבא משתמש באלמנט <SSLInfo> כדי להגדיר מארח וירטואלי להגדרת TLS חד-כיוונית ב-HTTPS:
<VirtualHost name="myTLSVHost">
<HostAliases>
<HostAlias>apiTLS.myCompany.com</HostAlias>
</HostAliases>
<Interfaces/>
<Port>9006</Port>
<OCSPStapling>off</OCSPStapling>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>ref://myTestKeystoreRef</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>
</VirtualHost>בדוגמה הזו, הרכיב <Enabled> מוגדר כ-true כדי להפעיל TLS חד-כיווני, והרכיבים <KeyStore> ו-<KeyAlias> מציינים את מאגר המפתחות והמפתח שמשמשים את חיבור ה-TLS.
כדי להפעיל TLS דו-כיווני, מגדירים את הרכיב <ClientAuthEnabled> לערך
true ומציינים מאגר אישורים
באמצעות הרכיב <TrustStore>. מאגר האישורים מכיל את אישור הלקוח, ואופציונלית, את שרשרת רשות האישורים של האישור.
החלטה איך לציין את השם של מאגר המפתחות ומאגר האישורים במארח הווירטואלי
בדוגמה של המארח הווירטואלי שלמעלה, ציינתם את מאגר המפתחות באמצעות הפניה. הפניה היא משתנה שמכיל את השם של מאגר המפתחות, במקום לציין את השם של מאגר המפתחות ישירות.
היתרון בשימוש בהפניה הוא שאפשר לשנות את הערך של ההפניה כדי לשנות את מאגר המפתחות שבו משתמש המארח הווירטואלי, בדרך כלל כי תוקף האישור במאגר המפתחות הנוכחי עומד לפוג בעתיד הקרוב. שינוי הערך של ההפניה לא מחייב הפעלה מחדש של נתב Edge.
לחלופין, אפשר להשתמש בשם מילולי של מאגר המפתחות במארח הווירטואלי. עם זאת, אם אי פעם תשנו את המארח הווירטואלי כדי לשנות את שם מאגר המפתחות, תצטרכו להפעיל מחדש את נתבי Edge.
הגבלות על השימוש בהפניות למאגרי מפתחות ולמאגרי אישורים מהימנים
כשמשתמשים בהפניות למאגרי מפתחות ולמאגרי אישורים, צריך להביא בחשבון את ההגבלה הבאה:
- אפשר להשתמש בהפניות למאגר מפתחות ולמאגר אישורים במארחים וירטואליים רק אם אתם תומכים ב-SNI ומסיימים את ה-SSL בנתבי Apigee.
- אם יש לכם מאזן עומסים לפני נתבי Apigee, ואתם מסיימים את ה-TLS במאזן העומסים, אתם לא יכולים להשתמש בהפניות למאגר מפתחות ולמאגר אישורים במארחים וירטואליים.
שינוי של מארח וירטואלי קיים כדי להשתמש בהפניות למאגר המפתחות ולמאגר האישורים
מומלץ מאוד ב-Apigee שמארחים וירטואליים ישתמשו בהפניה למאגרי מפתחות ולמאגרי אישורים. הפניות מאפשרות לכם לשנות את מאגר המפתחות ואת מאגר האישורים שבהם משתמש המארח הווירטואלי בלי שתצטרכו להפעיל מחדש את נתבי Edge.
אם המארחים הווירטואליים שלכם מוגדרים כרגע לשימוש בשם המילולי של מאגר המפתחות או של מאגר האישורים, אתם יכולים להמיר אותם לשימוש בהפניות. כדי לעשות זאת, מעדכנים את המארח הווירטואלי כך שישתמש בהפניות, ואז מפעילים מחדש את נתבי Edge.
הגדרת הצפנות ופרוטוקולים של TLS ב-Edge 4.15.07 ובגרסאות קודמות
אם אתם משתמשים ב-Edge בגרסה 4.15.07 ומטה, אתם יכולים להגדיר את פרוטוקול ה-TLS ואת ההצפנות
שבהם נעשה שימוש במארח הווירטואלי באמצעות תגי הצאצא <Ciphers> ו-<Protocols> של התג <SSLInfo>. התגים האלה מתוארים בטבלה שלמטה.
לדוגמה:
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>myTestKeystore</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>myTestKeystore</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
<Ciphers>
<Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Cipher>
<Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Cipher>
</Ciphers>
<Protocols>
<Protocol>TLSv1.2</Protocol>
</Protocols>
</SSLInfo>
</SSLInfo>התג <Cipher> משתמש בשם של ההצפנה ב-Java וב-JSSE. לדוגמה, ל-Java 8 אפשר לעיין בכתובת
http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.
ציון של פרוטוקולים ואלגוריתמים להצפנה ב-TLS ב-Edge גרסה 4.16.01 עד 4.16.09
ב-Edge בגרסאות 4.16.01 עד 4.16.09, אפשר להגדיר את הצפנים ופרוטוקולי ברירת המחדל עבור מארחים וירטואליים באופן גלובלי בנתב. הגדרות ברירת המחדל האלה חלות על כל המארחים הווירטואליים.
משתמשים בטוקנים כדי לציין את פרוטוקולי ברירת המחדל ואת ההצפנות:
- כדי לציין את פרוטוקולי ברירת המחדל, משתמשים בטוקן
conf_load_balancing_load.balancing.driver.server.ssl.protocols - כדי לציין את הצפנים שמוגדרים כברירת מחדל לנתב, משתמשים בטוקן
conf_load_balancing_load.balancing.driver.server.ssl.ciphers
ערך ברירת המחדל של טוקן conf_load_balancing_load.balancing.driver.server.ssl.protocols הוא:
conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
ההגדרה הזו מציינת שהנתב תומך ב-TLS בגרסאות 1.0, 1.1 ו-1.2. מציינים רשימת ערכים שמופרדת ברווחים לאסימון.
ערך ברירת המחדל של טוקן conf_load_balancing_load.balancing.driver.server.ssl.ciphers הוא:
conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES
ההגדרה הזו מציינת:
- נדרש אורך מפתח של 128 ביטים ומעלה (
HIGH). - החרגה של צפנים ללא אימות (
!aNULL) - החרגה של חבילות הצפנה באמצעות MD5 (
!MD5) - החרגת חבילות הצפנה באמצעות DH (כולל DH אנונימי, DH זמני ו-DH קבוע) וגם
triple DES (
!DH+3DES) - החרגה של סטים של אלגוריתמים להצפנה (cipher suite) שמשתמשים בהחלפת מפתחות RSA וב-Triple DES (
!RSA+3DES)
למידע על התחביר והערכים שמותרים בטוקן הזה, אפשר לעיין במאמר בנושא הצפנות של OpenSSL. שימו לב שהאסימון הזה משתמש בשמות הצפנה של OpenSSL, כמו AES128-SHA256, ולא בשמות הצפנה של Java/JSSE, כמו TLS_RSA_WITH_AES_128_CBC_SHA256.
כדי להגדיר את האסימון לנתב:
- עורכים את הקובץ
/opt/apigee/customer/application/router.properties. אם הקובץ לא קיים, צריך ליצור אותו. - מגדירים את הטוקן
conf_load_balancing_load.balancing.driver.server.ssl.ciphers. לדוגמה, כדי לציין רק TLSv1.2 ולהחריג סטים של אלגוריתמים להצפנה באמצעות מפתחות משותפים מראש, מוסיפים!PSK:conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2 conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES:!PSK
- מוודאים שהקובץ
router.propertiesנמצא בבעלות של apigee:chown apigee:apigee /opt/apigee/customer/application/router.properties
- מפעילים מחדש את נתב Edge:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- בודקים את הערך של הטוקן:
/opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers
הגדרת פרמטרים של מארח וירטואלי של TLS ב-Edge בגרסה 4.17.01 ואילך
אם אתם משתמשים ב-Edge בגרסה 4.17.01 ואילך, אתם יכולים להגדיר כמה מאפייני TLS למארח וירטואלי יחיד, כמו פרוטוקול TLS וצופן, באמצעות תג הצאצא <Properties> של התג <VirtualHost>. התגים האלה מתוארים במאמר הפניה למאפיינים של מארח וירטואלי.
לדוגמה:
<VirtualHost name="myTLSVHost">
<HostAliases>
<HostAlias>apiTLS.myCompany.com</HostAlias>
</HostAliases>
<Interfaces/>
<Port>9006</Port>
<OCSPStapling>off</OCSPStapling>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>ref://myTestKeystoreRef</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>
<Properties>
<Property name="proxy_read_timeout">50</Property>
<Property name="keepalive_timeout">300</Property>
<Property name="proxy_request_buffering">off</Property>
<Property name="proxy_buffering">off</Property>
<Property name="ssl_protocols">TLSv1.2 TLSv1.1</Property>
<Property name="ssl_ciphers">HIGH:!aNULL:!MD5:!DH+3DES:!kEDH</Property>
</Properties>
</VirtualHost>למידע על התחביר והערכים שמותרים בטוקן ssl_ciphers, אפשר לעיין במאמר OpenSSL ciphers.
שימו לב שהאסימון הזה משתמש בשמות הצפנה של OpenSSL, כמו AES128-SHA256, ולא בשמות הצפנה של Java/JSSE, כמו TLS_RSA_WITH_AES_128_CBC_SHA256.
יצירת מארח וירטואלי שמשתמש ב-HTTPS
בדוגמה הזו מציינים את מאגר המפתחות למארח הווירטואלי באמצעות הפניה. שימוש בהפניה מאפשר לשנות את מאגר המפתחות בלי להפעיל מחדש את נתבי ה-Router.
כדי ליצור את המארח הווירטואלי, פועלים לפי השלבים הבאים:
- יוצרים ומגדירים מאגר מפתחות בשם myTestKeystore באמצעות התהליך שמתואר כאן: מאגרי מפתחות ומאגרי אישורים. מוודאים שב-keystore נעשה שימוש בשם כינוי myKeyAlias עבור האישור והמפתח הפרטי.
-
משתמשים בקריאה הבאה ל-POST API כדי ליצור את ההפניה בשם keystoreref למאגר המפתחות שיצרתם למעלה:
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \ -d '<ResourceReference name="keystoreref"> <Refers>myTestKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>' -u email:passwordההפניה מציינת את השם של מאגר המפתחות ואת סוג ההפניה כ-
KeyStore.כדי לראות את ההפניה, משתמשים בקריאה הבאה ל-API מסוג GET:
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password יוצרים את המארח הווירטואלי באמצעות API של Create a Virtual Host, כאשר
<ms-IP>היא כתובת ה-IP או שם הדומיין של צומת שרת הניהול.חשוב לציין את ההפניה הנכונה למאגר המפתחות ואת הכינוי של המפתח:
curl -X POST -H "Content-Type:application/xml" \ http://<ms-IP>:8080/v1/o/{org_name}/environments/{env_name}/virtualhosts \ -d '<VirtualHost name="newTLSTrustStore2"> <HostAliases> <HostAlias>apiTLS.myCompany.com</HostAlias> </HostAliases> <Interfaces/> <Port>9005</Port> <OCSPStapling>off</OCSPStapling> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://keystoreref</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo> </VirtualHost>' \ -u email:password- יוצרים רשומת DNS למארח הווירטואלי שתואמת לכינוי המארח.
אם יש לכם שרתי proxy קיימים של API, מוסיפים את המארח הווירטואלי לרכיב
<HTTPConnection>ב-ProxyEndpoint. המארח הווירטואלי נוסף אוטומטית לכל ה-API Proxy החדשים.במאמר מידע על מארחים וירטואליים מוסבר איך מעדכנים proxy ל-API אחרי שיוצרים מארח וירטואלי.
אחרי שמעדכנים את proxy ל-API כך שישתמש במארח הווירטואלי, ויוצרים את רשומת ה-DNS עבור הכינוי של המארח, אפשר לגשת ל-proxy ל-API כמו שמוצג בהמשך:
https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}לדוגמה:
https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282
יצירה ושינוי של הפניות למאגר מפתחות או למאגר אישורים
אפשר גם להגדיר את המארח הווירטואלי כך שישתמש בהפניה למאגר המפתחות או למאגר האישורים במקום זאת. היתרון בשימוש בהפניה הוא שאפשר לעדכן את ההפניה כך שתצביע על מאגר מפתחות או על מאגר אישורים אחרים כדי לעדכן את אישור ה-TLS בלי להפעיל מחדש נתב.
לדוגמה, בהמשך מוצג מארח וירטואלי שמשתמש בהפניה למאגר המפתחות:
<VirtualHost name="myTLSVHost">
<HostAliases>
<HostAlias>apiTLS.myCompany.com</HostAlias>
</HostAliases>
<Interfaces/>
<Port>9006</Port>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>ref://keystoreref</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>
</VirtualHost>משתמשים בקריאה הבאה ל-POST API כדי ליצור את ההפניה בשם keystoreref:
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
-d '<ResourceReference name="keystoreref">
<Refers>myTestKeystore</Refers>
<ResourceType>KeyStore</ResourceType>
</ResourceReference>'
-u email:password
ההפניה מציינת את השם של מאגר המפתחות ואת הסוג שלו.
כדי לראות את ההפניה, משתמשים בקריאה הבאה ל-API מסוג GET:
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
כדי לשנות בהמשך את ההפניה כך שתצביע על מאגר מפתחות אחר, ולוודא שלכינוי יש את אותו השם, משתמשים בקריאת ה-PUT הבאה:
curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
-d '<ResourceReference name="keystoreref">
<Refers>myNewKeystore</Refers>
<ResourceType>KeyStore</ResourceType>
</ResourceReference>'
-u email:password