בדף הזה מוסבר איך להפעיל יציאת Secure Sockets Layer (SSL) כשפורסים Extensible Service Proxy V2 (ESPv2) באמצעות Google Kubernetes Engine, Kubernetes או Compute Engine. במקרים מסוימים, כדאי להפעיל יציאת SSL בשירות Endpoints שפרסתם.
לפני שמתחילים, חשוב לעיין בהדרכות לגבי סוג השירות והסביבה שבחרתם, ולוודא שאתם יודעים איך לפרוס את ESPv2 בלי SSL.
הגדרת מפתחות ואישורים של SSL
כדי להגדיר את יציאת ה-SSL לטיפול בבקשות HTTPS, פועלים לפי השלבים הבאים:
בודקים שקובץ מפתח ה-SSL נקרא
server.keyוקובץ האישור נקראserver.crt. לצורך בדיקה, אפשר ליצורserver.keyו-server.crtבחתימה עצמית באמצעות OpenSSL עם הפקודה הבאה:openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout ./server.key -out ./server.crt
מציינים גם את
CNוגם אתsubjectAltNameבאישור השרת. הערך של המאפיינים האלה צריך להיות זהה ל-DNS או ל-IP שמשמשים את הלקוחות כדי להתקשר לשירות שלכם. אחרת, לחיצת היד של ה-SSL תיכשל.
הפעלת SSL ב-ESPv2 ב-Kubernetes
כדי להפעיל את יציאת ה-SSL עבור ESPv2 ב-Kubernetes:
יוצרים סוד של Kubernetes עם מפתח ואישור SSL:
kubectl create secret generic esp-ssl \ --from-file=./server.crt --from-file=./server.key
עורכים את קובצי התצורה של Kubernetes, למשל
echo-ssl.yaml, כמו שמוצג בקטע הקוד הבא:הערה: בדוגמה להגדרה מוצגות השורות שצריך לערוך. כדי לפרוס את הקובץ ב-Cloud Endpoints, צריך את קובץ התצורה המלא.
מעתיקים את הסודות של Kubernetes שיצרתם כנפחים, לפי ההוראות בדף בנושא נפחים ב-Kubernetes.
מפעילים את ESPv2 כמו שמתואר במאמר ציון אפשרויות הפעלה ל-ESPv2, אבל מוסיפים את דגל ההפעלה
--ssl_server_cert_pathכדי לציין את הנתיב לקובצי האישורים שנטענו.מפעילים את השירות עם קובץ התצורה המעודכן של Kubernetes באמצעות
kubectl.kubectl apply -f echo-ssl.yaml
מריצים את פקודת OpenSSL הבאה כדי ליצור את אישור הבסיס של הלקוח:
openssl x509 -in ./server.crt -out ./client.pem -outform PEM
אם הלקוח משתמש ב-
curl, אפשר להשתמש בקובץclient.pemבדגל--caroot. ב-gRPC, client.pemמשמש כקובץ אישור הבסיס של פרטי הכניסה של SSL לערוץ gRPC.
עדכון אישורי SSL
חשוב לעדכן את אישורי ה-SSL מדי פעם. כדי לעדכן את אישורי ה-SSL, צריך לבצע את השלבים הבאים:
- יוצרים אישורים חדשים, כמו שמתואר בשלב 1 למעלה.
- מטמיעים את האישורים החדשים בסודות של Kubernetes, כמו שמתואר בשלב 3 למעלה.
- מעדכנים את הפריסה של ESPv2 Kubernetes, כמו שמתואר בשלב 5 למעלה.
- יוצרים מחדש את קובץ אישור הבסיס של הלקוח, כמו שמתואר בשלב 6 למעלה.
הפעלת SSL ב-ESPv2 ב-Compute Engine
כדי להפעיל SSL ב-Compute Engine, קודם מעתיקים את הקבצים server.key ו-server.crt לתיקייה /etc/nginx/ssl של מופע Compute Engine, באמצעות השלבים הבאים:
מריצים את הפקודה הבאה ומחליפים את INSTANCE_NAME בשם של מכונת Compute Engine:
gcloud compute scp server.* INSTANCE-NAME
מתחברים למופע באמצעות
ssh.gcloud compute ssh INSTANCE-NAME
בתיבה של מכונת ה-VM של המופע, יוצרים את הספרייה ומעתיקים אליה את הקבצים:
sudo mkdir -p /etc/esp/sslsudo cp server.* /etc/esp/ssl/פועלים לפי ההוראות לסוג השירות כדי לבצע פריסה באמצעות Docker. כשמריצים את קובץ ה-Docker של ESPv2, משתמשים בפקודה הבאה:
sudo docker run --name=esp \ --detach \ --publish=443:9000 \ --net=esp_net \ --volume=/etc/esp/ssl:/etc/esp/ssl \ gcr.io/endpoints-release/endpoints-runtime:2 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=echo:8080 \ --ssl_server_cert_path=/etc/esp/ssl \ --listener_port=9000
בהשוואה לפקודה
docker runשאינה SSL, הגרסה של הפקודה שכוללת SSL יוצרת הגדרה שונה. לדוגמה, פקודת ה-SSL:- מבצעים Mount לתיקייה עם קובצי המפתח וה-CRT אל הקונטיינר באמצעות
--volume. - השימוש ב-
--ssl_server_cert_path=/etc/esp/sslמאפשר ל-ESPv2 למצוא את קובצי אישורי השרתserver.keyו-server.crtבתיקייה/etc/esp/ssl. משנה את דגל מיפוי היציאות
--publish. בקשות נכנסות ליציאת HTTPS 443 ממופות ליציאה 9000 של ESPv2.
- מבצעים Mount לתיקייה עם קובצי המפתח וה-CRT אל הקונטיינר באמצעות
עדכון אישורי SSL
חשוב לעדכן את אישורי ה-SSL מדי פעם. כדי לעדכן את אישורי ה-SSL, צריך לבצע את השלבים הבאים:
- יוצרים אישורים חדשים ומעתיקים אותם למכונות וירטואליות, כמו שמתואר בשלב 1 למעלה.
- מעתיקים את האישורים החדשים לספרייה
/etc/esp/ssl, כמו שמתואר בשלב 3 למעלה. - עוצרים ומפעילים מחדש את מאגר ESPv2 באמצעות הפקודה
sudo docker run, כמו שמתואר בשלב 4 למעלה.
בדיקת יציאת ה-SSL
כדי להקל על בדיקת יציאת ה-SSL, מגדירים את משתני הסביבה הבאים:
מגדירים את IP_ADDRESS לכתובת ה-IP של מכונת Compute Engine עם אישור ה-SSL החדש.
מגדירים את ENDPOINTS_KEY למפתח API תקין.
אחרי שמפעילים את יציאת ה-SSL, אפשר להשתמש ב-HTTPS כדי לשלוח בקשות ל-Extensible Service Proxy. אם האישור שלכם הוא בחתימה עצמית, צריך להשתמש ב--k כדי להפעיל את האפשרות הלא מאובטחת ב-curl:
curl -k -d '{"message":"hello world"}' -H "content-type:application/json" \
https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY
לחלופין, אפשר ליצור את האישור בפורמט pem ולהשתמש באפשרות --cacert כדי להשתמש באישור עם חתימה עצמית ב-curl, כמו שמוצג בהמשך:
openssl x509 -in server.crt -out client.pem -outform PEMcurl --cacert "./client.pem" -d '{"message":"hello world"}' -H "content-type:application/json" \ https://IP_ADDRESS:443/echo?key=ENDPOINTS_KEY