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

השער סומך על מנפיק, לא על רשימת קבצים

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

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

ארבע שאלות, ארבעה רשומות שונות

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

Question you are answeringWhere the answer livesHow quickly it changesWhat it will never show
Was this identity ever created?The issuer's issuance databaseOnly when something is issuedWhether the device still exists
Is a copy sitting on this host?The paths you actually inspectedWhenever anyone copies filesCertificates that were never copied here
Has the issuer withdrawn it?Published revocation stateWhen the issuer next publishesWithdrawals that are not published yet
Is it connected right now?The live session tableContinuouslyAnything about past or future sessions

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

מנפיק ומספר סידורי הם המפתח היציב היחיד

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

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

קראו תעודה אחת בכל פעם

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

openssl x509 -in <cert>.pem -noout -issuer -serial -subject -dates -fingerprint -sha256
openssl crl -in <issuer>.crl -noout -text | head -n 40

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

grep -c '^V' pki/index.txt
grep '^R' pki/index.txt | cut -f4,5

מלאי שישרוד את ההנפקה הבאה

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

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

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