אבטחת דומיינים מותאמים אישית באמצעות SSL

התמיכה ב-SSL ב-App Engine כוללת נקודות קצה של SSL שמפוזרות ברחבי העולם ואיזון עומסים מובנה, כדי להציג את האפליקציה בצורה מאובטחת, מהימנה ומהירה לקהל ברחבי העולם.

כברירת מחדל, חיבורי HTTPS בדומיין המותאם אישית מופעלים באופן אוטומטי באמצעות אישורי SSL מנוהלים. אחרי מיפוי של דומיין מותאם אישית לאפליקציה ועדכון רשומות ה-DNS, מערכת App Engine מספקת אישור SSL מנוהל, מחדשת את האישור ומבטלת אותו כשמסירים את הדומיין המותאם אישית מהאפליקציה.

לפני שמתחילים

  • חשוב לוודא שכבר הגדרתם את הדומיין המותאם אישית בפרויקט App Engine.

  • אם אתם משתמשים ב-Cloud Load Balancing ובקבוצת נקודות קצה ברשת (NEGS) בלי שרת כדי לנתב תנועה לאפליקציית App Engine, מומלץ למפות את הדומיין המותאם אישית למאזן העומסים במקום ישירות לאפליקציה, ולהשתמש באישורי SSL מנוהלים על ידי Google שנוצרו עבור מאזן העומסים. כך לא צריך לנהל אישורי SSL נפרדים לכל אפליקציה בלי שרת. באמצעות Cloud Load Balancing, אפשר להגדיר מדיניות SSL ששולטת בתכונות של SSL שמאזן העומסים מנהל משא ומתן לגביהן עם הלקוחות.

    מידע נוסף זמין בדפים הבאים:

    חשוב לזכור את ההגבלה הבאה:

    • מומלץ להשתמש באמצעי בקרה על תעבורת נכנסת כדי שהאפליקציה תקבל רק בקשות שנשלחות ממאזן העומסים (ומ-VPC אם משתמשים בו). אחרת, המשתמשים יכולים להשתמש בכתובת ה-URL של האפליקציה ב-App Engine כדי לעקוף את מאזן העומסים, את מדיניות האבטחה של Cloud Armor, את אישורי ה-SSL ואת המפתחות הפרטיים שמועברים דרך מאזן העומסים.

אימות אישור מנוהל

אחרי הגדרת הדומיין המותאם אישית ועדכון רשומות ה-DNS, אישור SSL מנוהל מסופק באופן אוטומטי תוך כמה דקות. בחירת רשות האישורים מתבצעת באופן אוטומטי. האישור המנוהל נחתם על ידי Google Trust Services ‏ (GTS) או על ידי Let's Encrypt.

כדי לוודא שהאישור הוקצה:

  1. במסוף Google Cloud , עוברים אל App Engine > Settings > Custom Domains (הגדרות > דומיינים בהתאמה אישית):

    אל "דומיינים מותאמים אישית"

  2. אבטחת ה-SSL מוצגת כניהול Google.

פתרון בעיות שקשורות לאישורי SSL מנוהלים

  • יכול להיות שתצטרכו לעדכן את רשומות ה-DNS של הדומיין המותאם אישית כדי לאמת את שם הדומיין. ‫App Engine לא יכול לספק אישורים לדומיינים לא מאומתים.

  • אפשר לבדוק את סטטוס האישור באמצעות Admin API על ידי שימוש בבקשת AuthorizedCertificate.GET.

  • אם לא הוקצה אישור מנוהל כי רשומות ה-DNS לא זמינות, יכול להיות שהשדה ManagedCertificate.ManagementStatus יהיה FAILED_RETRYING_NOT_VISIBLE. מוודאים שרשומות ה-DNS מעודכנות, מחכים כמה דקות ומנסים שוב. יכולות לחלוף 24 שעות עד שרשומות ה-DNS יהיו זמינות.

  • אם הסטטוס הוא FAILED_PERMANENT, סימן שכל הניסיונות לחידוש המינוי נכשלו. בודקים את הגדרות ה-DNS ואז מעדכנים את מיפוי הדומיין המותאם אישית לפי השלבים לעדכון לאישורי SSL מנוהלים.

שדרוג לאישורי SSL מנוהלים

לפני שמשדרגים לאישורי SSL בניהול Google, חשוב לדעת שאישורים מנוהלים לא תומכים במיפויים עם תו כללי לחיפוש.

אם אתם משתמשים בתת-דומיינים והאישור הונפק על ידי Let's Encrypt, יש הגבלה של 50 אישורים מנוהלים בשבוע לכל דומיין בסיסי. אם תגיעו למגבלה, App Engine ימשיך לנסות להנפיק אישורים מנוהלים עד שכל הבקשות יטופלו.

כדי לעבור מאישורי SSL משלכם לאישורי SSL בניהול Google, או כדי להוסיף אישורי SSL מנוהלים לאפליקציה קיימת עם דומיין מותאם אישית, צריך לעדכן את מיפוי הדומיין:

  1. במסוף Google Cloud , עוברים אל App Engine > Settings > Custom Domains (הגדרות > דומיינים בהתאמה אישית):

    אל "דומיינים מותאמים אישית"

  2. בוחרים את הדומיין שרוצים לאבטח ולוחצים על הפעלת אבטחה מנוהלת.

השבתת אישורי SSL מנוהלים

כדי להשבית אישורי SSL מנוהלים:

  1. במסוף Google Cloud , עוברים אל App Engine > Settings > Custom Domains (הגדרות > דומיינים בהתאמה אישית):

    אל "דומיינים מותאמים אישית"

  2. בוחרים את הדומיין ולוחצים על השבתת אבטחה מנוהלת.

שימוש באישורי SSL משלכם

במקום להשתמש באישורי SSL מנוהלים, אתם יכולים להשתמש באישור משלכם. אם לאישור שלכם אין הוכחת שקיפות, יכול להיות שיוצגו באפליקציה אזהרות SSL ב-Chrome בגלל אכיפה של הוכחת שקיפות האישור. מידע נוסף על הוכחות שקיפות אישורים ועל אופן הפעולה בהתאם לדרישות זמין במאמר אכיפת שקיפות אישורים.

כדי להשתמש באישורי SSL משלכם ולנהל אותם במקום באישורים שמנוהלים על ידי Google:

  1. חשוב לוודא שכבר הגדרתם את הדומיין המותאם אישית בפרויקט App Engine.

  2. השבתה של אישורים ברירת מחדל שמנוהלים על ידי Google.

  3. מקבלים אישור לדומיין מרשות האישורים (CA) שתבחרו. ההליך המדויק עשוי להשתנות בהתאם לרשות.

  4. ממירים את קובצי המפתח הפרטי ואישור ה-SSL לפורמטים שנתמכים על ידי App Engine. לפני שמעלים את הקבצים, צריך להמיר את המפתח הפרטי למפתח פרטי RSA ולשרשר את אישורי ה-SSL לקובץ אחד.

  5. צריך לוודא שיש לכם את ההרשאות הנכונות במסוףGoogle Cloud ובעלות מאומתת (שלב 3) על כל הדומיינים שקשורים או על דומייני ההורה שלהם. לדוגמה:

    • אם האישור הוא עבור www.example.com, אפשר לאמת את הבעלות על www.example.com או על example.com.
    • אם האישור הוא עבור www.example.com ועבור sub.example.com, אפשר לאמת את הבעלות על www.example.com ועל sub.example.com, או על example.com.
    • אם האישור הוא עבור *.example.com, צריך לאמת את הבעלות על example.com.
  6. מעלים את המפתח הפרטי ואת אישור ה-SSL, ואז ממפים את הדומיין לאפליקציה:

    1. במסוף Google Cloud , עוברים אל App Engine > Settings > SSL certificates:

      עוברים אל SSL Certificates

    2. לוחצים על העלאת אישור חדש.

    3. מעלים את אישור ה-SSL המשורשר בקטע PEM encoded X.509 public key certificate, לדוגמה concat.crt, ואז מעלים את המפתח הפרטי של RSA בקטע מפתח פרטי של RSA בקידוד PEM לא מוצפן, לדוגמה myserver.key.pem.
    4. לוחצים על Upload. כל אישור SSL שמעלים גלוי וזמין לשימוש בכל Google Cloud הפרויקטים האחרים, כך שלא צריך להעלות את אותו אישור שוב ושוב.
    5. בוחרים את האישור שרוצים להקצות לדומיין ואז לוחצים על שמירה כדי להשתמש ב-SSL עבור הדומיין הזה.

  7. כדי לבדוק את השינויים, נכנסים לדומיין בדפדפן, למשל באמצעות https, כמו https://www.example.com.

העברת מיפויים מאישור שרת לאישור חדש

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

כדי להעביר מיפויים מאישור פעיל:

  1. מקבלים אישור חדש לדומיין מרשות האישורים (CA) שתבחרו.

  2. ממירים את קובצי המפתח הפרטי ואישור ה-SSL לפורמטים שנתמכים על ידי App Engine.

  3. מעלים את המפתח הפרטי של RSA ואת אישור ה-SSL המשורשר:

    1. מעלים את אישור ה-SSL בדף אישורי SSL.

      עוברים אל SSL Certificates
      1. לוחצים על העלאת אישור חדש.

      2. מעלים את אישור ה-SSL המשורשר בקטע PEM encoded X.509 public key certificate (אישור של מפתח ציבורי בקידוד PEM X.509), לדוגמה concat.crt, ואז מעלים את המפתח הפרטי של RSA בקטע Unencrypted PEM encoded RSA private key (מפתח פרטי של RSA בקידוד PEM לא מוצפן), לדוגמה myserver.key.pem.
      3. לוחצים על Upload.
    2. בוחרים את האישור החדש שזה עתה הוספתם מרשימת האישורים, ואז בוחרים את הדומיין שהאישור הישן משמש אותו.
    3. לוחצים על שמירה כדי להעביר את המיפויים מהאישור הישן לאישור החדש.

השגת אישור

התהליך לקבלת אישור SSL משתנה בהתאם לרשות האישורים שבה אתם משתמשים. יכול להיות שתצטרכו לבצע שינויים קלים בהוראות שבהמשך. בדרך כלל, כל רשות אישורים מספקת הוראות שיעזרו לכם בתהליך.

כדי לקבל אישור לשימוש באפליקציית App Engine:

  1. יוצרים מפתח פרטי ובקשת חתימה על אישור (CSR) באמצעות הכלי openssl:

    1. מריצים את הפקודה הבאה מספרייה שבה רוצים ליצור את הקובץ server.csr:

      openssl req -nodes -newkey rsa:2048 -keyout [MY_PRIVATE_KEY].key -out [MY_CSR].csr
      

      where:

      • [MY_PRIVATE_KEY].key הוא הקובץ שנוצר שבו מאוחסן המפתח הפרטי. לדוגמה: myserver.key
      • [MY_CSR].csr הוא הקובץ שנוצר לבקשת החתימה על האישור. לדוגמה: server.csr
    2. כשמוצגת בקשה, מזינים את הפרטים הבאים:

      • קוד המדינה בן 2 הספרות, למשל US לארצות הברית.
      • שם העיר.
      • שם החברה. אם אין לכם חברה, אתם יכולים להשתמש בשם שלכם.
      • היחידה הארגונית או NA אם אין לכם יחידה ארגונית.
      • שם נפוץ שמייצג את הדומיין, לדוגמה: www.example.com
      • כתובת האימייל שלכם.

      לא צריך לציין אף אחד מהערכים האחרים, כולם אופציונליים.

  2. בוחרים רשות אישורים שמתאימה לכם ורוכשים אישור. לדוגמה, אפשר להשתמש ב: SSLMate, Thawte, Comodo או בכל רשות אישורים אחרת.

    פרטים על סוגי האישורים הנתמכים זמינים במאמר סוגי אישורי SSL.

  3. כש-CA מבקש את התוכן של קובץ ה-CSR, פועלים לפי ההוראות שלו להעתקה ולהדבקה של התוכן מקובץ .csr שיצרתם קודם, לדוגמה server.csr.

  4. פועלים לפי ההנחיות כשסמכות האישורים מבקשת אישור מבעל הדומיין.

  5. אחרי שתספקו אישור מבעל הדומיין, רשות האישורים תשלח לכם את האישור, שבדרך כלל מגיע כקובץ ZIP. פורסים את הקובץ הזה לתיקיית עבודה כדי לשרשר את האישורים האלה להעלאה ל-App Engine.

המרת מפתחות פרטיים ושרשור אישורי SSL

לפני שמעלים את המפתח הפרטי ואת אישורי ה-SSL ל-App Engine, צריך להמיר את המפתח הפרטי למפתח פרטי מסוג RSA ולשרשר את כל אישורי ה-SSL.

  1. ממירים את קובץ המפתח הפרטי שיצרתם קודם לכן למפתח פרטי RSA לא מוצפן. לדוגמה, אפשר להריץ את הפקודה הבאה של openssl rsa:

    openssl rsa -in [MY_PRIVATE_KEY].key -out [MY_RSA_KEY].key.pem
    

    where:

    • [MY_PRIVATE_KEY].key הוא הקובץ שנוצר ומכיל את המפתח הפרטי שלכם. לדוגמה: myserver.key
    • [MY_RSA_KEY].key הוא הקובץ שנוצר ומכיל מפתח RSA פרטי לא מוצפן. לדוגמה: myserver.key.pem

      דוגמה:

      openssl rsa -in myserver.key -out myserver.key.pem
      
  2. משרשרים את כל קובצי ה-.crt מרשות האישורים לקובץ אחד באמצעות הפקודה הבאה:

    cat [MY_DOMAIN_CERT].crt [MY_SecureServerCA].crt [MY_TrustCA].crt [MY_TrustExternalCARoot].crt > [MY_CONCAT_CERT].crt
    

    איפה

    • [MY_DOMAIN_CERT].crt הוא האישור לדומיין שלכם. לדוגמה: www_example_com.crt
    • [MY_SecureServerCA].crt,‏ [MY_TrustCA].crt ו-[MY_TrustExternalCARoot].crt הם קובצי האישורים האחרים שסופקו על ידי רשות האישורים.
    • [MY_CONCAT_CERT].crt הוא הקובץ המשורשר שמכיל את כל קובצי האישורים שלכם מ-.crt. דוגמה: concat.crt

      דוגמה:

      cat www_example_com.crt AddTrustExternalCARoot.crt RSADomainValidationSecureServerCA.crt RSAAddTrustCA.crt > concat.crt
      
  3. מאמתים את אישור ה-SSL ואת המפתח הפרטי:

    1. כדי לוודא שהמפתח הפרטי והאישור תואמים, אפשר להשתמש בפקודות openssl x509 ו-openssl rsa. דוגמאות:

      openssl x509 -noout -modulus -in concat.crt | openssl md5
      openssl rsa -noout -modulus -in myserver.key.pem | openssl md5
      

      הפקודות openssl x509 ו-openssl rsa אמורות להחזיר את אותו פלט.

    2. כדי לוודא שאישור ושרשרת רשויות האישורים שלו תקפים, אפשר להשתמש בפקודה openssl verify. לדוגמה:

      openssl verify -verbose -CAfile concat.crt concat.crt
      
  4. כשתהיו מוכנים, תוכלו להעלות את המפתח הפרטי של RSA ואת האישורים המשורשרים אל App Engine.

סוגים של אישורי SSL

‫App Engine תומך בסוגי האישורים הבאים:

  • דומיין יחיד או שם מארח יחיד
  • חתימה עצמית
  • תו כללי לחיפוש
  • שם חלופי של בעלים (subject) (SAN) / כמה דומיינים

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

  • המפתח הפרטי והאישור צריכים להיות בפורמט PEM.
  • המפתחות הפרטיים לא יכולים להיות מוצפנים.
  • קובץ אישור יכול להכיל עד חמישה אישורים, כולל אישורים בשרשרת ואישורי ביניים.
  • כל שמות הנושאים באישור המארח צריכים להיות זהים לדומיינים המאומתים של המשתמש או להיות תת-דומיינים שלהם.
  • המפתחות הפרטיים חייבים להשתמש בהצפנת RSA.
  • המודולוס המקסימלי המותר של המפתח: 2048 ביט

אם אישור המארח דורש אישור ביניים או אישור בשרשרת, כמו שרשויות אישורים (CA) רבות מנפיקות, צריך להוסיף את אישורי הביניים או האישורים בשרשרת לסוף קובץ האישור הציבורי.

חלק מהתכונות של App Engine משתמשות בתת-דומיינים מיוחדים. לדוגמה, אפליקציה יכולה להשתמש בתת-דומיינים כדי לפנות לשירותי אפליקציה או לגרסאות שונות של האפליקציה. כדי להשתמש בהם עם SSL, כדאי להגדיר אישור SAN או אישור עם תווים כלליים. אישורים עם תו כללי לחיפוש תומכים רק ברמה אחת של תת-דומיין.

הסרת אישורי SSL מותאמים אישית

כדי להפסיק להשתמש באישור SSL מותאם אישית:

  1. במסוף Google Cloud , נכנסים לדף ההגדרות SSL certificates של App Engine.

    מעבר להגדרות של אישור SSL

  2. לוחצים על האישור שרוצים להסיר מהדומיין.

  3. מבטלים את הסימון של שם הדומיין שרוצים להפסיק להשתמש בו באישור ה-SSL, ואז לוחצים על שמירה.

שימוש בכותרות Strict-Transport-Security

מטעמי אבטחה, כל האפליקציות צריכות לעודד את הלקוחות להשתמש בחיבורי https. כדי להורות לדפדפן להעדיף את https על פני http, משתמשים בכותרת Strict-Transport-Security.

המאמרים הבאים