התחברות VPN בתעודה ב-Mac: זהות, שימוש במפתח או אמון בשער?
שלוש החלטות עומדות מאחורי התחברות בתעודה: איזו זהות נבחרת, אם רכיב ה-VPN רשאי להשתמש במפתח שלו, ואם השער מהימן.
התחברות VPN מבוססת תעודה מבקשת מה-Mac משהו צר יותר מסיסמה: להשתמש במפתח הפרטי המסוים הזה, בהקשר ההרצה הזה, כדי להוכיח זהות לשער הזה. כשזה נכשל, ההודעה בדרך כלל מתארת רק את הדבר האחרון שהשתבש, שהוא לעתים רחוקות הדבר שגרם לכך. מעבר על שלוש ההחלטות בסדר שבו המערכת מקבלת אותן שומר על אבחון ישר, ומונע התייחסות לבעיית הרשאה מקומית כאל כשל באימות השרשרת.
עברו על ההתחברות בסדר שבו עושה זאת ה-Mac
תחילה הלקוח בוחר זהות: תעודה עם מפתח פרטי שמיש, הזמינה דרך המאגר הנתמך או ספק האישורים. לאחר מכן רכיב ה-VPN מבקש לבצע פעולה קריפטוגרפית במפתח הזה, ומודל ההרשאה המקומי עונה. רק לאחר ששניהם מצליחים מתרחשת לחיצת היד המרוחקת, שבה ה-Mac מעריך את השער והשער מעריך את הוכחת הלקוח.
| Decision | Typical symptom | Where to look |
|---|---|---|
| Identity selection | No valid identity, wrong certificate offered | Profile and which identity the client picked |
| Local key use | Signing or interaction error before any handshake | Execution context and key access rules |
| Remote authentication | Chain, name or client-admission rejection | Gateway identity and what it accepts |
קראו את הטבלה מלמעלה למטה ועצרו בשורה הראשונה שנכשלת. כל מה שמתחת לכשל אינו מוכח, ולכן “התעודה אינה מהימנה” היא מסקנה כל כך נפוצה וכל כך לא אמינה.
מה ההרשאה המקומית מכסה באמת
במודל מחזיק המפתחות של macOS, פריטים מוגנים נושאים כללי גישה המיוחדים לפעולה ורשימת יישומים מהימנים. חתימה במפתח פרטי היא אחת מהפעולות הללו, והכללים חלים על הקובץ הניתן להרצה שמבצע אותה, ולא על התעודה כמסמך. מסמך הבקרה של Apple מתווה גם קו בין המודל הזה לבין מחזיק המפתחות של iCloud וסידורי קבוצות גישה, ולכן עצה שנכתבה לאחד אינה עוברת לשני.
שתי השלכות נובעות מכך. תעודה ציבורית שנראית ברשימה אינה מוכיחה שרכיב הרקע של ה-VPN יכול להגיע למפתח הזה בכלל. והרשאה שניתנה ליישום חזית אינה אומרת דבר על עוזר נפרד או הרחבת רשת, משום שאלה קוד אחר עם זהויות אחרות.
זהו את המימוש בפועל ואת מנגנון שיתוף האישורים הנתמך שלו, במקום להעתיק נתיב קובץ הרצה מלקוח ישן. אשרו תחילה איזו זהות המערכת תציע מלכתחילה:
security find-identity -v -p ssl-client
לקרוא את errSecInteractionNotAllowed
הסטטוס הזה מדווח על אינטראקציה אסורה עם Security Server, והוא אינו אומר דבר על שרשראות תעודות. קראו אותו יחד עם הפעולה שיצרה אותו: בקשת חתימה שנשלחה מהקשר שאינו יכול להציג בקשה למשתמש תיכשל כך גם כשהמפתח והתעודה שניהם תקפים לחלוטין. הפעולה שרשמה אותו, ולא מאגר התעודות, היא המקום להתחיל בו. כל שינוי שתעשו בעוגני אמון יותיר את השגיאה בדיוק במקומה.
לכן התייחסו לקוד כאל סיבה לבחון את הקשר ההרצה ואת ההרשאה. התייחסות אליו כהוכחה שתעודת ה-CA של השער אינה מהימנה שולחת אתכם לחצי הלא נכון של הבעיה, והשינוי שתעשו שם לא ישפיע על השגיאה כלל.
לתקן בצמצום, לא לרוחב
התחילו בהוראות ההרשמה או הייבוא של בעל החיבור. תעדו את גרסת הלקוח, את היקף הפרופיל, את הזהות שנבחרה ואת השגיאה המקומית הרלוונטית הראשונה, משום שארבע העובדות הללו הן מה שהעברה לתמיכה דורשת ומה שהשוואה מאוחרת תלויה בו. פרופיל מנוהל או זהות מגובה חומרה עשויים לדרוש מהמנהל או מהספק לתקן את ההעברה, ושום כמות של לחיצות מקומיות אינה מחליפה זאת.
כשהמוצר מצפה לאישור משתמש, ודאו איזה רכיב מבקש אותו ואשרו רק את הגישה הזאת דרך הזרימה הנתמכת. כשלמרכיב אין דרך להעלות בקשה בהקשר שבו הוא פועל, ההקצאה חייבת ללכת בדרך שהספק מתעד, ולא בדיאלוג שנגרר מחלון מסוף אחר.
שני שינויים נארזים יחד בעצות ישנות, ושניהם רחבים מדי. מתן גישה לכל יישום למפתח הפרטי מרחיב את השימוש המקומי במפתח הרבה מעבר לדרישה, והגדרת התעודה ל-Always Trust משנה את הערכת התעודות לכל דבר במכונה. אף אחד מהם אינו מבטא “מימוש ה-VPN המאושר הזה, באמצעות הזהות המיועדת הזו”.
בדקו מקומית לפני קריאת השער
לאחר תיקון, אשרו שהפעולה המקומית מצליחה לפני שאתם מפרשים תגובה כלשהי מהצד השני. אם החתימה עובדת כעת, דחייה שלאחר מכן של שם, שרשרת או כניסת לקוח היא תוצאה חדשה ולא הישנות, והיא שייכת להחלטה אחרת עם בעל אחר.
העברה מועילה נוקבת באיזו משלוש ההחלטות נכשלה ועוצה שם. היא לעולם אינה כוללת את המפתח הפרטי, והיא לעולם אינה מאפסת פריטים לא קשורים במחזיק המפתחות בתקווה שדף נקי יעזור. קבעו את שתי ההרגלים האלה לפני התקרית ולא במהלכה, כשהיצר לנסות הכול בבת אחת הוא החזק ביותר. כרטיס שאומר “בניתי מחדש את מחזיק המפתחות” אינו מספר לקורא הבא כמעט דבר על התקלה המקורית.