תבניות אישור מוגדרות מראש

‫Certificate Authority Service מספק תבניות אישורים מוגדרות מראש כדי לייעל את תהליך הנפקת האישורים ולאבטח אותו. התבניות המוכנות האלה מציעות קבוצות מוגדרות מראש של פרמטרים X.509 לתרחישי שימוש נפוצים, וכך מפשטות את ניהול האישורים, מפחיתות את הסיכון לשגיאות אנוש ומאפשרות לאכוף שיטות מומלצות לאבטחה. כל תבנית מיועדת לתרחיש שימוש ספציפי, כדי לוודא שהאישורים מונפקים עם הפרמטרים הנכונים למטרה שלשמה הם מיועדים, וגם בהתאם למגבלות שנקבעו על ידי רשות האישורים (CA) המנפיקה.

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

שימוש בתבנית אישור

כדי להחיל תבנית, מציינים את שם התבנית בשדה certificateTemplate של משאב CertificateRequest. שירות ה-CA מחיל את הפרמטרים מהתבנית שנבחרה על האישור שהונפק.

הוראות מפורטות על האופן שבו צריך ליצור את משאב CertificateRequest ולכלול את השדה certificateTemplate זמינות במאמר בקשת אישור.

סוגים של תבניות אישורים

אלה תבניות האישורים המוגדרות מראש שזמינות לכם: כל תבנית מיועדת לתרחיש שימוש ספציפי ומגדירה מראש את הפרמטרים של X.509 שהתבנית אוכפת.

בתיאורי התבניות שבהמשך, כל הפרמטרים שלא מוגדרים באופן מפורש על ידי התבנית נלקחים מהמשאב CertificateRequest, בין אם הם מסופקים בבקשה לחתימה על אישור (CSR) או בשדות שאתם מגדירים.

ברירת מחדל

שם התבנית: default

התבנית הזו משמשת באופן אוטומטי אם לא מציינים תבנית אישור במשאב CertificateRequest. האישור שהונפק מקבל בירושה את ההגדרות Key usage ו-Extended key usage מהפרופיל של רשות האישורים המנפיקה, ומגדיר את Basic constraints ל-CA:FALSE, וכך מונע את השימוש באישור לחתימה על אישורים אחרים.

פרמטר X509 ערך
RawSubject [User defined SubjectOverride or Passthrough from CSR]
מגבלות בסיסיות קליפורניה:FALSE
שם חלופי של בעלים (subject) [העברת סיגנל ללא שינוי מ-CSR]
שימוש במַפְתח [שימוש במפתח שהוגדר ב-CA]
שימוש מורחב במַפְתח [שימוש מורחב במפתח מוגדר ב-CA]

אישורי TLS של לקוחות

שם התבנית: endEntityClientAuthCertificate

התבנית הזו מנפיקה אישורים של ישויות קצה לאימות TLS בצד הלקוח. באישור שהונפק, הערך של Extended key usage מוגדר כ-TLS web client authentication, והערך של Basic constraints מוגדר כ-CA:FALSE. כך האישור לא יכול לשמש לחתימה על אישורים אחרים.

פרמטר X509 ערך
RawSubject [User defined SubjectOverride or Passthrough from CSR]
מגבלות בסיסיות קליפורניה:FALSE
שם חלופי של בעלים (subject) [העברת סיגנל ללא שינוי מ-CSR]
שימוש במַפְתח קריטי, חתימה דיגיטלית, קידוד מפתח
שימוש מורחב במַפְתח אימות לקוח TLS באינטרנט

אישורי TLS של השרת

שם התבנית: endEntityServerAuthCertificate

התבנית הזו מנפיקה אישורים של ישויות קצה לאימות TLS בצד השרת, והיא מתאימה לשימוש בשרתי אינטרנט. האישור שהונפק מגדיר את Extended key usage ל-TLS web server authentication ואת Basic constraints ל-CA:FALSE, וכך מונע את השימוש באישור לחתימה על אישורים אחרים.

פרמטר X509 ערך
RawSubject [User defined SubjectOverride or Passthrough from CSR]
מגבלות בסיסיות קליפורניה:FALSE
שם חלופי של בעלים (subject) [העברת סיגנל ללא שינוי מ-CSR]
שימוש במַפְתח קריטי, חתימה דיגיטלית, קידוד מפתח
שימוש מורחב במַפְתח אימות שרת אינטרנט TLS

אישורי CA משניים (PathLen 0)

שם התבנית: blankSubCACertificate_PathLen0_CSRPassthrough

התבנית הזו מנפיקה אישורי CA משניים עם אילוץ של אורך נתיב של 0, שמאפשר לאישור לחתום על אישורי ישות קצה, אבל לא על אישורי CA אחרים.

פרמטר X509 ערך
RawSubject [User defined SubjectOverride or Passthrough from CSR]
מגבלות בסיסיות קליפורניה:TRUE, pathlen: 0
שם חלופי של בעלים (subject) [העברת סיגנל ללא שינוי מ-CSR]
שימוש במַפְתח [השימוש במפתח מוגדר ב-CSR]
שימוש מורחב במַפְתח [השימוש המורחב במפתח מוגדר ב-CSR]

אישורי CA משניים (PathLen 1)

שם התבנית: blankSubCACertificate_PathLen1_CSRPassthrough

התבנית הזו מנפיקה אישורי CA משניים עם אילוץ אורך נתיב של 1, שמאפשר לאישור לחתום על אישורי ישות קצה וגם על אישורי CA משניים אחרים עם אורך נתיב של 0.

פרמטר X509 ערך
RawSubject [User defined SubjectOverride or Passthrough from CSR]
מגבלות בסיסיות קליפורניה:TRUE, pathlen: 1
שם חלופי של בעלים (subject) [העברת סיגנל ללא שינוי מ-CSR]
שימוש במַפְתח [השימוש במפתח מוגדר ב-CSR]
שימוש מורחב במַפְתח [השימוש המורחב במפתח מוגדר ב-CSR]

זיהוי של מאפיינים זהים

לכל רשות אישורים יש פרופיל שמגדיר את סוגי האישורים שמותר לה להנפיק. לדוגמה, יכול להיות שרשות אישורים מוגבלת להנפקת אישורי אימות לקוח בלבד. הפרופיל של רשות האישורים מוגדר בקטע certificateProfile של משאב CertificateAuthority כשיוצרים את רשות האישורים, כמו שמתואר במאמרים יצירת רשות אישורי בסיס ויצירת רשות אישורים משנית.

כשמבקשים אישור באמצעות תבנית מוגדרת מראש, שירות CA מאמת את הפרמטרים של התבנית מול ההגדרות של רשות האישורים המנפיקה. כדי שהתבנית תהיה תקפה, הפרמטרים של X.509 שמוגדרים בתבנית שנבחרה צריכים להיות קבוצת משנה של הפרמטרים שמותרים על ידי רשות האישורים שהנפיקה את האישור, בהתאם לcertificateProfile. מתרחש קונפליקט אם התבנית מבקשת מאפיינים או הרשאות שרשות האישורים לא מורשית להעניק. לדוגמה, תבנית לא יכולה לבקש Extended key usage (EKU) של serverAuth אם רשות האישורים שהנפיקה אותו מורשית להעניק רק clientAuth.

אם שירות CA יזהה סתירה כזו, CertificateRequest ייכשל. אפשר לבדוק את הסטטוס של משאב CertificateRequest כדי להבין את הסיבה לכישלון.

דוגמה

בתרחיש הבא, רשות אישורים בשם client-certs-ca מוגדרת להנפקת אישורים רק לאימות לקוחות. המאפיין certificateProfile מציין שExtended key usage המותר היחיד הוא TLS web client authentication.

כדי להנפיק אישור לשרת באמצעות התבנית endEntityServerAuthCertificate, שולחים את CertificateRequest הבא:

  apiVersion: pki.security.gdc.goog/v1
  kind: CertificateRequest
  metadata:
    name: server-cert-req
    namespace: my-project
  spec:
    certificateAuthorityRef:
      name: client-certs-ca
      namespace: my-project
    csr: "..."
    certificateTemplate: endEntityServerAuthCertificate
    signedCertificateSecret: server-cert-secret

הבקשה הזו נכשלת בגלל הסיבות הבאות:

  • בתבנית endEntityServerAuthCertificate נדרש EKU TLS web server authentication.
  • לרשות האישורים המנפיקה, client-certs-ca, יש certificateProfile שמאפשר רק את EKU TLS web client authentication.

מכיוון ש-EKU שנדרש על ידי התבנית לא נכלל ברשימת ה-EKU שמותרים על ידי הפרופיל של CA, הדרישות של התבנית לא מהוות קבוצת משנה של הפרמטרים שמותרים על ידי CA. לכן, הבקשה נדחית.