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

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

חומר אימות וחומר חתימה

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

לכן ca.crt שייך לפרופיל ו־ca.key אינו שייך לשום מקום בקרבתו. שמות הקבצים הם מוסכמה ולא ערובה, ולכן יש לבדוק את הסוג ולא להסיק אותו מהשם.

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

מה הלקוח צריך להוכיח במפתח שלו

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

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

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

FileRoleBelongs on
ca.crtPublic certificate used to verify signaturesEvery client profile
ca.keyPrivate key that issues certificatesProtected CA storage only
client key pairProves one device's identityThat device alone

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

שתי פקודות אומרות לך איזה סוג של אובייקט אתה מחזיק בלי להדפיס שום סוד. הראשונה מציינת את הנושא ואת דגל ה-CA בתעודה; השנייה מאמתת מפתח ומדווחת על סוגו. הרץ את שתיהן על הקבצים בחבילה שאתה עומד להפיץ. כל מה שמאומת כמפתח פרטי אינו שייך לספריית לקוח.

openssl x509 -in ca.crt -noout -subject -ext basicConstraints
openssl pkey -in ca.key -noout -check

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

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

הכלת מפתח שכבר הפצת

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

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

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

מאמרים קשורים