הנה המבנה של אישור X.509:
תעודה :: = SEQUENCE {tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signatureValue BIT STRING} TBSCertificate :: = SEQUENCE {version [0] EXPLICIT גרסת DEFAULT v1, serialNumber CertificateSerialNumber, AlgorithmIdentifier חתימה, שם המנפיק, תוקף תוקף, נושא שם, subjectPublicKeyInfo נושא PublicKeyInfo, מנפיק ייחודי [1] IMPLICIT UniqueIdentifier OPTION או v3 subjectUniqueID [2] IMPLICIT UniqueIdentifier אופציונלי, - אם קיים, גרסה חייבת להיות סיומות v2 או v3 [3] EXPLICIT Extensions OPTIONAL - אם קיימת, גרסה חייבת להיות v3}
הנתונים הכלולים בתעודה עצמה הם החלק TBSCertificate
: הוא מחייב את המפתח הציבורי (subjectPublicKeyInfo) למזהה (הנושא) ולתכונות שונות אחרות הרחבות).
לאחר מכן ישלב את החתימה ליצירת מבנה תעודה
. אלגוריתם החתימה מכתיב כיצד יש לעשות זאת.
בעיקרו של דבר מחושב עיכול של TBSCertificate
(בדרך כלל SHA-1) ואז נחתם באמצעות המפתח הפרטי של החותם ( מנפיק בתנאי X.509). השינוי הקל ביותר בתוכן TBSCertificate
אמור לגרום לשינוי העיכול, אשר בתורו צריך לפסול את החתימה.
באמצעות מקשי RSA, החתימה על העיכול באמצעות המפתח הפרטי היא מתמטית. דומה מאוד למה שנעשה לצורך הצפנה באמצעות המפתח הציבורי. זה לא אותו דבר מבחינה רעיונית, ול- DSA אין הדדיות זו, למשל.
העיקרון זהה לסוגים אחרים של אישורים, אם כי המבנה עשוי להיות שונה. בהתחשב בכך שמפתחות ציבוריים של PGP הם למעשה אישורים, ייתכן שתעניין גם בשאלות הבאות: