חתום עצמית מול CA ציבורי ל-VPN: מה באמת משתנה
תעודות חתומות עצמית וציבוריות מצפינות מנהרת VPN באותה דרך. ההבדל האמיתי הוא מי ערב לשרת ומי חייב לסמוך על אותה טענה.
אתם מגיעים לעמוד התעודות של הגדרת VPN, רואים אפשרות חתומה עצמית בחינם לצד CA ציבורי בתשלום, והשאלה נשמעת כמו בחירת אבטחה. היא למעשה בחירת קהל. שתי האפשרויות מצפינות את המנהרה באותן פרימיטיבים, ושתיהן הופכות חסרות ערך אם המפתח הפרטי דולף. מה שמפריד ביניהן הוא מי מציג את הטענה לגבי זהות השרת ומי נמצא בעמדה לבדוק את הטענה הזו.
תעודה עושה שני תפקידים שמתבלבלים
תעודה קושרת מפתח ציבורי לשם, והמפתח עושה את עבודת ההצפנה והחתימה. החתימה על התעודה היא הצהרה נפרדת: רשות כלשהי בדקה שהשם שייך לבעל המפתח הזה. תעודה חתומה עצמית מציגה את ההצהרה הזו על עצמה, וזו בכלל לא טענה של צד שלישי.
אתרים ציבוריים זקוקים לגרסת הצד השלישי, מפני שמבקרים מגיעים בלי קשר קודם ונשענים על מאגר האמון של הדפדפן. לקוח VPN אינו זר. אתם נותנים לו את תעודת ה-CA, או מקבעים את תעודת השרת, בתוך הפרופיל שהוא מתקין, כך שהאימות רץ בדיוק מול הרשות שבחרתם. שום CA מסחרי לא חייב להיות מעורב כדי שהבדיקה הזו תאמר משהו.
חוזק הסשן שנוצר בא מגודל המפתח ומחבילת ההצפנה, לא מהחתום. לכן לקרוא לתעודה חתומה עצמית "פחות מוצפנת" הוא פשוט שגוי; היא פחות מובטחת באופן נרחב, וזו תכונה אחרת.
איפה CA ציבורי מרוויח את האגרה שלו
המקרה הברור ביותר הוא עמוד הניהול. אם עמיתים, קבלנים או כל מי שאין לו פרופיל מוכן חייבים לפתוח את ממשק האינטרנט של שרת ה-VPN בלי אזהרת דפדפן, תעודה מהימנה לציבור מסירה את החיכוך הזה. הדפדפן כבר סומך על החתום, כך שאין מה לייבא ואין מה להסביר.
לנוחות הזו יש עלויות שראוי לנקוב בהן לפני שקונים. החידוש חייב להיות אוטומטי אחרת האתר נשבר לפי לוח זמנים, תעודות ציבוריות חושפות את שם המארח ביומני שקיפות תעודות, ומגבלות קצב הנפקה מענישות סקריפט שמנסה שוב ביתר להט. אף אחד מאלה אינו סיבה להימנע מ-CA ציבורי, אבל זו עבודה תפעולית ש-CA פרטי מעביר למקום אחר.
מה שתעודה ציבורית לא עושה הוא לאמת את המשתמשים שלכם. זהות הלקוח היא החלטה נפרדת, שנעשית עם תעודות לקוח, סיסמאות או גורם שני, וה-CA שחותם על השרת לא אומר דבר על מי רשאי להתחבר אליו.
איפה CA פרטי מתאים ל-VPN
ל-VPN פרטי עם קבוצה מוכרת של לקוחות, הפעלת CA משלכם היא הבחירה המקובלת. אתם יוצרים את ה-CA פעם אחת, חותמים על תעודת השרת בשם שהלקוחות ישתמשו בו, ומפיצים את תעודת ה-CA בתוך כל פרופיל. אז כל לקוח מאמת את השרת מול הרשות שלכם, ואף צד חיצוני לא לומד את שם המארח.
העלויות אמיתיות אך מוגבלות. דפדפנים יתריעו כשמישהו פותח את עמוד הניהול ישירות, כי לדפדפן אין סיבה לסמוך על ה-CA שלכם. הפצת פרופילים הופכת לחלק מהקליטה, והחלפת ה-CA פירושה לגעת בכל לקוח. אלה מחירים סבירים לשירות עם עשרה או חמישים משתמשים מוכרים וכואבים לנקודת קצה ציבורית עם אלפים.
תנאי אחד הופך את כל הסדר לתקף: האימות חייב לקרות. לקוח שמוגדר להתעלם משגיאות תעודה מקבל כל שרת שמציג כל תעודה, כך שהבטחת הזהות נעלמת בעוד ההצפנה נשארת. ההגדרה הזו היא החולשה האמיתית ברוב הסיפורים של "חתום עצמית אינו מאובטח".
המפתח הפרטי של ה-CA קובע מה תוכלו לעשות אחר כך
ההפתעה מגיעה בדרך כלל חודשים אחר כך, כשרוצים להוסיף מכשיר. הנפקת תעודת לקוח דורשת את המפתח הפרטי של ה-CA, וכך גם הפקת רשימת ביטול. אם ירשתם שרת שיש לו קבצי התעודה והמפתח אבל לא את מפתח ה-CA, אינכם יכולים לחתום על שום דבר חדש. האפשרויות שלכם הן לבנות מחדש את ה-PKI ולתת לכל לקוח תעודת CA חדשה, או לעבור לאימות בסיסמה, שהוא מודל אבטחה אחר ואינו משחזר את מה שאבד.
שני מלכודות קטנות יותר חיות באותו שטח. סקריפטי easy-rsa מניחים שאתם עומדים בתיקייה שמכילה אותם, כך ששגיאת קובץ חסר פירושה בדרך כלל מיקום שגוי ולא התקנה פגומה. ועיצוב המבוסס על תעודות בלבד הוא לגמרי לגיטימי: אתם יכולים לדרוש תעודות לקוח בלי מפתח משותף מראש, בתנאי שלכל לקוח יש אחת והשרת מאמת את השרשרת.
הנפיקו תעודה אחת לכל מכשיר ולא תעודת לקוח משותפת אחת לצוות כולו. מחשב נייד שאבד עולה אז ביטול אחד בלבד במקום הנפקה מחדש לכולם.
בדקו מה ירשתם
לפני שתכננו שינוי כלשהו, קראו את התעודה שכבר יש לכם:
$ openssl x509 -in server.crt -noout -subject -issuer -dates
subject=CN = vpn.example.net
issuer=CN = vpn.example.net
notAfter=Nov 3 09:00:00 2027 GMT
$ openssl verify -CAfile ca.crt server.crt
server.crt: OK
אם המנפיק שווה לנושא, התעודה חתומה עצמית, וזו בחירת עיצוב ולא פגם. התאריכים אומרים לכם מתי החידוש יהפוך לבעיה של מישהו, ואימות מוצלח מול ה-CA שאתם מתכננים לשלוח מאשר שהשרשרת עובדת לפני שלקוח אחד מנסה אותה.
אחר כך בחרו לפי קהל והפצה: CA ציבורי כשדפדפנים לא מוכרים חייבים לסמוך על עמוד הניהול, CA פרטי כשכל לקוח מקבל פרופיל שאתם שולטים בו. אף אחד משני העונים אינו מוצפן יותר מהאחר.