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

עברו על ההתחברות בסדר שבו עושה זאת ה-Mac

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

DecisionTypical symptomWhere to look
Identity selectionNo valid identity, wrong certificate offeredProfile and which identity the client picked
Local key useSigning or interaction error before any handshakeExecution context and key access rules
Remote authenticationChain, name or client-admission rejectionGateway identity and what it accepts

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

מה ההרשאה המקומית מכסה באמת

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

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

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

security find-identity -v -p ssl-client

לקרוא את errSecInteractionNotAllowed

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

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

לתקן בצמצום, לא לרוחב

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

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

שני שינויים נארזים יחד בעצות ישנות, ושניהם רחבים מדי. מתן גישה לכל יישום למפתח הפרטי מרחיב את השימוש המקומי במפתח הרבה מעבר לדרישה, והגדרת התעודה ל-Always Trust משנה את הערכת התעודות לכל דבר במכונה. אף אחד מהם אינו מבטא “מימוש ה-VPN המאושר הזה, באמצעות הזהות המיועדת הזו”.

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

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

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

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