איך תעודת אתר מוכיחה זהות - שרשרת האמון מאחורי המנעול הירוק¶
הדפדפן מציג מנעול ליד כתובת האתר, ואתם מניחים שזה בטוח. אבל תעצרו רגע - איך בדיוק הדפדפן שלכם, שמעולם לא פגש את השרת הזה קודם, מחליט לסמוך על התעודה שהוא מציג? זו לא הנחה עיוורת, זו שרשרת אמון מדויקת שנבנתה על הצפנה אסימטרית, כפי שהסברנו בפוסט על הצפנה סימטרית ואסימטרית.
מה זו בעצם תעודה¶
תעודת אתר (SSL/TLS certificate) היא בעצם מסמך שמקשר בין שם דומיין ספציפי לבין מפתח ציבורי ספציפי, וחתום דיגיטלית על ידי גורם שלישי אמין. היא אומרת בעצם - "אני, הגורם החותם, מאשר שהמפתח הציבורי הזה שייך למי שמחזיק בכתובת amittech.dev, ולא למישהו אחר". השרת מחזיק את המפתח הפרטי המתאים, שאף אחד חוץ ממנו לא רואה.
חתימה דיגיטלית - איך מוכיחים שהתעודה לא זויפה¶
חתימה דיגיטלית עובדת בעזרת אותו זוג מפתחות מהצפנה אסימטרית, רק בכיוון הפוך משימוש רגיל. הגורם החותם מחשב hash של תוכן התעודה, ומצפין את ה-hash הזה עם המפתח הפרטי שלו. כל אחד שמחזיק את המפתח הציבורי המתאים יכול לפענח את החתימה ולקבל בחזרה את ה-hash, ולהשוות אותו ל-hash שהוא מחשב בעצמו מתוכן התעודה. אם הם תואמים, שני דברים מוכחים בבת אחת - שהתעודה נחתמה על ידי מי שמחזיק במפתח הפרטי הזה, ושהתוכן שלה לא שונה אפילו בבית אחד מאז החתימה, כי כל שינוי בתוכן היה משנה את ה-hash לגמרי.
מי בדיוק חותם על תעודות - רשות אישורים¶
הגורם שחותם על תעודות אתרים נקרא רשות אישורים, Certificate Authority, או בקיצור CA. חברות כמו DigiCert או Let's Encrypt הן רשויות אישורים - לפני שהן חותמות על תעודה לדומיין מסוים, הן מוודאות בדרך זו או אחרת שמי שמבקש את התעודה באמת שולט בדומיין הזה, למשל דרך אימות שהוא מסוגל לשנות רשומת DNS או קובץ באתר.
שרשרת האמון - למה הדפדפן סומך על ה-CA מלכתחילה¶
עדיין נשארת שאלה - איך הדפדפן יודע לסמוך על ה-CA עצמו? התשובה היא שכל מערכת הפעלה ודפדפן מגיעים עם רשימה מובנית מראש של רשויות שורש (root CAs) שנחשבות אמינות, אחרי תהליך בדיקה קפדני שהן עברו. בפועל, רוב הרשויות לא חותמות ישירות על תעודות אתרים בעצמן, אלא מייצרות רשויות ביניים (intermediate CA), שהן אלה שחותמות בפועל על תעודות אתרים. כך נוצרת שרשרת - תעודת האתר חתומה על ידי רשות ביניים, שהתעודה שלה עצמה חתומה על ידי רשות השורש, שהדפדפן כבר סומך עליה מלכתחילה.
כשהדפדפן מקבל תעודת אתר, הוא הולך אחורה בשרשרת הזאת, חוליה אחר חוליה, עד שהוא מגיע לרשות שורש שהוא כבר מכיר ובוטח בה. אם השרשרת שלמה ותקינה מהתחלה ועד הסוף, הדפדפן סומך על התעודה. אם חוליה אחת שבורה, חתומה לא נכון, או פגה תוקף, הוא מציג אזהרת אבטחה.
מה קורה כשמישהו מנסה לזייף תעודה¶
בגלל שחתימה דיגיטלית תלויה במפתח פרטי שרק ה-CA מחזיק, תוקף לא יכול פשוט ליצור תעודה מזויפת לדומיין של מישהו אחר ולצפות שהיא תתקבל - הוא לא מחזיק במפתח הפרטי של אף רשות שורש. הדרכים המעשיות שבהן תוקפים כן מצליחים לעקוף את זה נשענות כמעט תמיד על נקודות תורפה אחרות לגמרי - השתלטות על DNS, גניבת מפתח פרטי אמיתי, או הטעיית משתמש להתעלם מאזהרת הדפדפן, לא שבירת ההצפנה או החתימה עצמן.
למה כדאי להבין את זה לעומק¶
הבנת שרשרת האמון מסבירה למה תעודת אתר שפגה תוקף חוסמת גישה מוחלטת, למה תעודות עצמיות (self-signed) מציגות אזהרה בדפדפן, ולמה חברות משקיעות בניהול תעודות אוטומטי. זה בדיוק הבסיס שאנחנו בונים עליו בקורס הרשתות, יחד עם כל שאר מנגנוני ההצפנה שהאינטרנט הבטוח בנוי עליהם.
קורס הרשתות המלא נמצא כאן, חינם ובעברית, עם הסבר מעמיק על תעודות והצפנה.
יש לכם שאלה על תעודה שלא נטענת נכון באתר שלכם? שאלו בדיסקורד.
לסיכום¶
תעודת אתר מוכיחה זהות בעזרת חתימה דיגיטלית של רשות אישורים, ושרשרת אמון שמובילה מהתעודה הספציפית, דרך רשויות ביניים, עד לרשות שורש שהדפדפן כבר סומך עליה מראש. זה לא קסם ולא הנחה עיוורת - זו הוכחה מתמטית מדויקת שנבנית מהצפנה אסימטרית, חוליה אחר חוליה.