אבטחת דומיינים מותאמים אישית באמצעות 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 בניהול Google לאפליקציה קיימת עם דומיין מותאם אישית, צריך לעדכן את מיפוי הדומיין:

  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 (אישור של מפתח ציבורי X.509 בקידוד PEM), לדוגמה 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. צריך לפתוח את קובץ ה-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.

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