מפענח תעודות ו־PEM

מפענח תעודות X.509 ובקשות חתימה מ־PEM — נושא, מנפיק, תוקף, שמות חלופיים, הרחבות וטביעות אצבע.

קלט PEM

הדביקו PEM למעלה והוא יפוענח כאן.

מה הכלי הזה עושה

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

הכול רץ בדפדפן. כאן זה משנה יותר מברוב הכלים — החלופה היא בדרך כלל הדבקת תעודת פרודקשן לשרת של מישהו אחר, או זכירת הפקודה של openssl, שכמעט אף אחד לא זוכר.

PEM הוא רק המעטפת

המקפים וה־Base64 הם אריזה. בפנים יש DER, קידוד בינארי של מבנה שנקרא ASN.1, והתווית שבין המקפים אומרת איזה מבנה לצפות לו:

CERTIFICATE           תעודת X.509 שהונפקה
CERTIFICATE REQUEST   בקשת חתימה: מה שביקשתם מרשות אישורים
PUBLIC KEY            מפתח חשוף, בלי זהות מצורפת
PRIVATE KEY           החצי הסודי, נדחה כאן

אותה תעודה יכולה להגיע גם כ־DER גולמי בקובץ ‎.cer או ‎.crt, בלי מקפים ובלי Base64. אם קובץ נפתח כרעש בינארי במקום כטקסט, זה מה שהוא; קודדו אותו ל־Base64 תחילה, או ייצאו אותו כ־PEM.

מה באמת יש בתוך תעודה

שדות הליבה זהים בכל תעודה שהונפקה אי פעם:

  • נושא — על מי התעודה. עבור אתר זה כיום בדרך כלל רק שם נפוץ אחד, ולעיתים קרובות לא יותר מזה.
  • מנפיק — רשות האישורים שחתמה עליה. שם הנושא שלה מופיע מילה במילה כמנפיק של כל מה שהיא חותמת, וזה מה שמאפשר בכלל לבדוק שרשרת.
  • תוקף — שני רגעים מוחלטים, תמיד ב־UTC. הכלי מציג את שניהם ומחשב כמה נשאר בדפדפן שלכם, מפני שלמכונה שבנתה את העמוד הזה אין מושג מתי אתם קוראים אותו.
  • מספר סידורי — ייחודי לכל מנפיק, וזה המזהה שבו משתמשים כשמבטלים תעודה.
  • אלגוריתם חתימה — במה המנפיק חתם, למשל SHA-256 עם ECDSA.
  • מפתח ציבורי — הסוג והגודל. ב־RSA זהו אורך הביטים של המודולוס; ב־EC זו תכונה של העקומה בשמה, ולכן P-256 היא תמיד 256 ביט.

שדה אחד שאנשים מצפים לו ולא מוצאים עוד: השם הנפוץ בנושא אינו מה שדפדפנים בודקים. הוא מתעלם ממנו לצורך התאמת שם מארח כבר שנים. מה שקובע הוא הרחבת השמות החלופיים, שלמטה.

ההרחבות שמכריעות אם היא עובדת

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

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

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

שרשראות, ומה «רציפה» אומר כאן

שרת כמעט אף פעם אינו שולח תעודה אחת. הוא שולח את שלו ואת תעודות הביניים הדרושות כדי להגיע לשורש שהלקוח כבר סומך עליו. הסדר קובע, והקובץ נקרא בדרך כלל fullchain.pem:

subject: example.com     issuer: Example CA R3     בלוק 1, עלה
subject: Example CA R3   issuer: Example Root      בלוק 2, ביניים

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

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

מה הכלי אינו אומר לכם

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

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

טביעות אצבע, ומפתחות פרטיים

טביעת האצבע SHA-256 היא גיבוב של התעודה כולה, והיא מה שמשווים מול ערך שמישהו נקב בו, או מול pin. שימו לב למה היא מזהה: את התעודה, לא את המפתח שבתוכה. חידוש תעודה עבור אותו מפתח מייצר טביעת אצבע אחרת, וזו הסיבה הרגילה לכך ש־pin נשבר בחידוש. טביעת ה־SHA-1 מוצגת גם היא מפני שכלים וקונסולות ישנים עדיין מדפיסים אותה — לזיהוי בלבד; ל־SHA-1 אין מה לחפש בחתימה על שום דבר.

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

שאלות נפוצות

האם הכלי אומר אם התעודה שלי מהימנה?
לא. אמון תלוי במאגר אמון ובבדיקת חתימה, ושניהם אינם אפשריים מקובץ שהודבק. הכלי מדווח מה התעודה אומרת על עצמה, והאם השמות בשרשרת מסתדרים.
האתר שלי עובד בכרום במחשב ונכשל בנייד. במה להסתכל?
כמעט תמיד בתעודת ביניים חסרה. דפדפנים שולחניים מביאים לעיתים קרובות את התעודה החסרה בעצמם ומסתירים את הבעיה; לקוחות אחרים לא. הדביקו כאן את השרשרת המלאה — אם הקשר בין שתי תעודות מדווח כשבור, זה הפער.
למה השם הנפוץ אינו תואם לאתר שלי?
מפני שהוא אינו מה שנבדק. התאמת שם מארח משתמשת בהרחבת השמות החלופיים, וכך כבר שנים. הסתכלו בשורת השמות החלופיים: אם שם המארח אינו מופיע שם, התעודה אינה מכסה אותו, מה שלא יגיד השם הנפוץ.
למה הכלי מסרב לפענח את המפתח הפרטי שלי?
בכוונה. שום דבר שתדביקו לא עוזב את הדפדפן, אבל הדבקת מפתחות פרטיים לדפי אינטרנט היא הרגל שכדאי להימנע ממנו, והכלי הזה מסרב ללמד אותו. תעודות ובקשות חתימה אינן מכילות סודות ומפוענחות כרגיל.
מה ההבדל בין תעודה ל־CSR?
CSR הוא מה ששולחים לרשות אישורים: שם הנושא שלכם, המפתח הציבורי שלכם, וההרחבות שאתם מבקשים, חתומים על ידיכם. תעודה היא מה שחוזר, עם שם הרשות עצמה כמנפיק, חלון תוקף ומספר סידורי. הכלי מפענח את שניהם.
האם התעודה שלי נשלחת לאנשהו?
לא. הניתוח, הפענוח וחישוב טביעות האצבע רצים כולם בדפדפן; שום דבר שתדביקו לא עוזב את המכשיר שלכם.