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

תנו שם לאובייקט לפני שאתם נותנים שם לערך

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

רשמו גם את האלגוריתם. SHA-256 הוא הציפייה הרגילה כיום, אבל כלים ישנים יותר הדפיסו SHA-1 אלא אם ביקשתם אחרת, וערך hex בן 40 תווים הוא סימן שאתם עומדים להשוות שני דברים שונים.

השיגו את הערך הצפוי בערוץ שני

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

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

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

חלצו את הערך בצד שלכם

עבור קובץ תעודה, הפקודה היא openssl x509 -in server.crt -noout -fingerprint -sha256. תמצית מפורשת חשובה: בלעדיה הפלט תלוי בגרסת OpenSSL שלכם. התוצאה היא מחרוזת hex מופרדת בנקודתיים, לכן הסירו את הנקודתיים והמירו את שני הצדדים לאותיות קטנות לפני ההשוואה.

עבור נקודת קצה שמדברת TLS ישירות, התחברו והוציאו את התעודה דרך צינור: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. זה עובד עבור פאנל ניהול אינטרנטי או מאזין TLS, לא עבור OpenVPN, שערוץ הבקרה שלו נמצא בתוך המנהרה. עבור OpenVPN, קראו את התעודה מהפרופיל בדיסק במקום לנסות ללכוד אותה מהסוקט.

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

תנאי עצירה

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

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

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

אחרי ההשוואה

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

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

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