מה לקוח ה-VPN שלך בודק לפני שהוא סומך על תעודה
העבר אזהרת תעודה דרך ארבעת השערים שהלקוח שלך בודק: אמון ב-CA, בניית שרשרת, שם וכוונת העמית, ומדיניות ביטול.
לקוח ה-VPN שלך אומר שלא ניתן היה לאמת את התעודה, והדיאלוג נעצר שם. הקובץ קיים, השרת פעיל, ואותו פרופיל עבד על מחשב נייד אחר בחודש שעבר. מתחת לאזהרה בת שורה אחת העביר הלקוח את תעודת העמית דרך ארבעה שערים: רשות אישורים שהגדרת ערבה לנתיב החתימה, הנתיב מגיע לרשות, שם העמית הוא זה שביקשת, והתעודה שמישה כעת למטרה הזו. מצא את השער שנסגר והתיקון הוא בדרך כלל קובץ אחד; דלג על השלב הזה ותייבא חבילות מחדש כל אחר הצהריים.
קרא את הדיאלוג לפני שאתה עורך את הפרופיל
שגיאות תעודה מנוסחות על ידי הספרייה שמתחת, לא על ידי מוצר ה-VPN שהתקנת, ולכן המחרוזת המדויקת היא הראיה הראשונה שלך. «לא ניתן לקבל תעודת מנפיק מקומית» מצביעה על הנתיב או על עוגן האמון. «התעודה פגה או שעדיין אינה תקפה» מצביעה על הזמן. «מטרת תעודה לא נתמכת» מצביעה על שימוש מורחב במפתח. אי-התאמת שם אומרת לך איזה שם ביקשה. אף אחד מהארבעה אינו מתוקן על ידי התקנה מחדש של הלקוח.
הגבר את רמת הרישום לפני שאתה משנה משהו. OpenVPN מדווח על כשל האימות סביב לחיצת היד כשאתה מריץ אותו עם --verb 4, ו-strongSwan רושם את החלטות הזהות והשרשרת שלו ליומן charon. אחר כך ודא איזו תעודה אתה בודק, כי אנשים נוהגים לבדוק את הקובץ בדיסק בעוד הפרופיל מטמיע עותק ישן יותר. כשהפרופיל מטמיע בלוקי PEM, התעודה המוטמעת היא זו שנבדקת.
רשות אישורים חותמת על זהויות, לא על הרשאות
הרשות מחזיקה שם ומפתח חתימה. היא מנפיקה תעודות שקושרות מפתח ציבורי לשם הזה לפי המדיניות שלה, עם חלון תוקף ומגבלות שימוש מצורפות. הלקוח שלך זקוק רק לתעודת הרשות כדי לזהות את המנפיק; הוא לעולם אינו זקוק למפתח החתימה, ושליחת המפתח הזה ללקוחות הייתה נותנת להם את היכולת להנפיק כל זהות שהפריסה סומכת עליה.
אמון ברשות הופך כל תעודה שהיא חתמה עליה למועמדת, לא לעמית הנכון. תעודת שרת אינטרנט מאותה CA פנימית היא גם מועמדת. לכן קיימים שערי השם והמטרה, ולכן מפתח CA שנחשף חשוב יותר מכל שרת בודד: הוא מגיע לכל זהות שהרשות אי פעם הנפיקה. הנפק תעודות לקוח לכל מכשיר, כך שמחשב נייד שאבד הוא ביטול אחד ולא החלפת מפתחות בכל הפריסה.
בנה מחדש את הנתיב שהלקוח מנסה לבנות
הנתיב עובר מתעודת העמית, דרך אפס או יותר תעודות ביניים, אל שורש במאגר האמון שלך. תעודת ביניים חסרה היא כשל השרשרת הנפוץ ביותר, ומנקודת המבט של הלקוח היא נראית בדיוק כמו שורש לא מהימן. קרא תחילה את העלה, ואז תן ל-OpenSSL לבנות את הנתיב מהחומר שאתה מתכוון לשלוח.
openssl x509 -in server.crt -noout -subject -issuer -dates
openssl verify -CAfile root.crt -untrusted intermediate.crt server.crt
openssl verify -show_chain -CAfile root.crt -untrusted intermediate.crt server.crt
מצב יציאה אפס פירושו שהנתיב נבנה מאותם קבצים; כשל נוקב בשם התעודה שאליה לא ניתן היה להגיע. אם openssl verify מצליח בעוד הלקוח עדיין מסרב, ההבדל הוא במה שהשרת באמת שולח או באיזה קובץ אמון הפרופיל טוען. ב-OpenVPN תעודות ביניים יכולות לנסוע עם קובץ תעודת השרת או להימסר בנפרד עם --extra-certs, וחבילה שמחזיקה שני שורשים תחת אותו שם נושא תשלח את אחד הלקוחות שלך לענף הלא נכון.
השם והמטרה הם שערים נפרדים
בניית השרשרת אינה שואלת לעולם אם השם שלך. OpenVPN בודק אותו רק כשהפרופיל מגדיר --verify-x509-name, וההרגל הישן להתאים רק את השם הנפוץ נשבר בתעודות שהזהויות שלהן חיות ב-subjectAltName. פריסות IKEv2 מתאימות את הזהות המוגדרת לרשומות SAN או לשם הנבדל, בהתאם ללקוח, וערך תו כללי או %any מכבה בשקט את ההשוואה שחשבת שיש לך.
אחר כך באים הזמן והמטרה. מחשב נייד ששעונו מקדים בכמה שעות דוחה תעודה שעדיין אינה תקפה, ותעודת ביניים שפגה מכשילה את הנתיב בעוד העלה בתוקף. כשלי מטרה נובעים מתעודה בלי serverAuth בשימוש מורחב במפתח, או עם keyUsage שאינו מתיר את חתימת לחיצת היד, אשר OpenSSL מדווח עליה כמטרת תעודה לא נתמכת. הנפק מחדש מהתבנית הנכונה; אין בדבר בהודעה הזו סיבה לכבות את האימות.
ביטול פועל רק אם מישהו הגדיר אותו
CRL או תגובת OCSP אינם נבדקים אוטומטית. בשרת OpenVPN תעודות לקוח נבדקות מול רשימה רק כשהאפשרות --crl-verify מצביעה על אחת. בדיקת תעודת השרת מצד הלקוח תלויה ביישום ולעיתים קרובות אינה קיימת. strongSwan זקוק לתוסף הביטול ולמדיניות לפני שהוא מסתכל ב-CRL עבור עמית.
זה מסביר את הפנייה שתקבל בסוף: תעודת לקוח שבוטלה עדיין מתחברת, וכולם מסיקים שהביטול שבור. שום דבר לא בדק. פרסם ורענן את ה-CRL, או החזק תעודות לקוח קצרות מועד מספיק כדי שביטול מיושן ישנה לזמן קצר, ותרגל את נתיב הביטול על תעודה במעבדה לפני שתזדקק לו במהלך תקלה.
סדר תיקון ששומר על האימות דלוק
מיין לפי סימפטום לפני שנוגעים בקבצים, כי כל שורה בטבלה שולחת אותך לאובייקט אחר.
| Client says | Most likely gate | First check |
|---|---|---|
| unable to get local issuer certificate | trust anchor or missing intermediate | your own openssl verify against the files the profile loads |
| expired or not yet valid | validity window | leaf and intermediate dates against the device clock |
| unsupported certificate purpose | extended key usage | serverAuth present, keyUsage allows the handshake |
| name mismatch | peer identity | subjectAltName entries versus the profile name |
עבור על הרשימה במעבר אחד: ודא את הקובץ שהפרופיל טוען, בנה את הנתיב בעצמך, בדוק שהשרת שולח את תעודת הביניים, השווה את השעון, קרא את ה-SAN, קרא את ה-EKU, ואז התחבר מחדש וצפה באותה שורת יומן נעלמת. אם לא ניתן לתת למכשיר CA בכלל, הצמדה היא החלופה ההוגנת, כי OpenVPN 2.6 מקבל את --peer-fingerprint ומצמצם את האמון למפתח אחד במקום להסיר את הבדיקה. RFC 5280 הוא המקור למשמעות של כל אחד מהשדות הללו.