תיאור
אפשר להשתמש ב-API הזה כדי לחשוף אישורים לפלטפורמה, והפלטפורמה יכולה להשתמש באישורים האלה לאימות TLS.
הרשאות
certificateProvider
זמינות
מושגים ושימוש
שימוש אופייני ב-API הזה כדי לחשוף אישורי לקוח ל-ChromeOS מתבצע באופן הבא:
- התוסף נרשם לאירועים
onCertificatesUpdateRequested
ו-onSignatureRequested
. - התוסף קורא ל-
setCertificates()
כדי לספק את הרשימה הראשונית של האישורים אחרי האתחול. - התוסף עוקב אחרי השינויים ברשימת האישורים הזמינים ומפעיל את
setCertificates()
כדי להודיע לדפדפן על כל שינוי כזה. - במהלך לחיצת היד של TLS, הדפדפן מקבל בקשה לאישור לקוח. באירוע
onCertificatesUpdateRequested
, הדפדפן מבקש מהתוסף לדווח על כל האישורים שהוא מספק כרגע. - התוסף מחזיר את האישורים שזמינים כרגע באמצעות השיטה
setCertificates()
. - הדפדפן משווה בין כל האישורים הזמינים לבין בקשת אישור הלקוח מהמארח המרוחק. ההתאמות מוצגות למשתמש בתיבת דו-שיח לבחירה.
- המשתמש יכול לבחור אישור ובכך לאשר את האימות או לבטל אותו.

- אם המשתמש מבטל את האימות או אם אין אישור שתואם לבקשה, אימות לקוח ה-TLS מבוטל.
- אחרת, אם המשתמש מאשר את האימות באמצעות אישור שסופק על ידי התוסף הזה, הדפדפן מבקש מהתוסף לחתום על הנתונים כדי להמשיך את לחיצת היד של TLS. הבקשה נשלחת כאירוע
onSignatureRequested
. - האירוע הזה מכיל נתוני קלט, מציין באיזה אלגוריתם צריך להשתמש כדי ליצור את החתימה ומתייחס לאחד מהאישורים שדווחו על ידי התוסף הזה. התוסף צריך ליצור חתימה לנתונים שצוינו באמצעות המפתח הפרטי שמשויך לאישור שאליו יש הפניה. יכול להיות שתידרש יצירה של חתימה על ידי הוספה של DigestInfo בתחילת התוצאה וריפוד שלה לפני החתימה בפועל.
- התוסף שולח את החתימה בחזרה לדפדפן באמצעות השיטה
reportSignature()
. אם אי אפשר לחשב את החתימה, צריך לקרוא לשיטה בלי חתימה. - אם החתימה סופקה, הדפדפן משלים את לחיצת היד בפרוטוקול TLS.
הסדר בפועל של השלבים יכול להיות שונה. לדוגמה, המשתמש לא יתבקש לבחור אישור אם נעשה שימוש במדיניות הארגונית לבחירה אוטומטית של אישור (ראו AutoSelectCertificateForUrls
ומדיניות Chrome למשתמשים).
בתוסף, זה יכול להיראות כמו קטע הקוד הבא:
function collectAvailableCertificates() { // Return all certificates that this Extension can currently provide. // For example: return [{ certificateChain: [new Uint8Array(...)], supportedAlgorithms: ['RSASSA_PKCS1_v1_5_SHA256'] }]; } // The Extension calls this function every time the currently available list of // certificates changes, and also once after the Extension's initialization. function onAvailableCertificatesChanged() { chrome.certificateProvider.setCertificates({ clientCertificates: collectAvailableCertificates() }); } function handleCertificatesUpdateRequest(request) { // Report the currently available certificates as a response to the request // event. This is important for supporting the case when the Extension is // unable to detect the changes proactively. chrome.certificateProvider.setCertificates({ certificatesRequestId: request.certificatesRequestId, clientCertificates: collectAvailableCertificates() }); } // Returns a private key handle for the given DER-encoded certificate. // |certificate| is an ArrayBuffer. function getPrivateKeyHandle(certificate) {...} // Digests and signs |input| with the given private key. |input| is an // ArrayBuffer. |algorithm| is an Algorithm. // Returns the signature as ArrayBuffer. function signUnhashedData(privateKey, input, algorithm) {...} function handleSignatureRequest(request) { // Look up the handle to the private key of |request.certificate|. const key = getPrivateKeyHandle(request.certificate); if (!key) { // Handle if the key isn't available. console.error('Key for requested certificate no available.'); // Abort the request by reporting the error to the API. chrome.certificateProvider.reportSignature({ signRequestId: request.signRequestId, error: 'GENERAL_ERROR' }); return; } const signature = signUnhashedData(key, request.input, request.algorithm); chrome.certificateProvider.reportSignature({ signRequestId: request.signRequestId, signature: signature }); } chrome.certificateProvider.onCertificatesUpdateRequested.addListener( handleCertificatesUpdateRequest); chrome.certificateProvider.onSignatureRequested.addListener( handleSignatureRequest);
סוגים
Algorithm
סוגים של אלגוריתמים קריפטוגרפיים לחתימה שנתמכים.
Enum
"RSASSA_PKCS1_v1_5_MD5_SHA1"
מציין את אלגוריתם החתימה RSASSA PKCS#1 v1.5 עם הגיבוב MD5-SHA-1. התוסף לא יכול להוסיף קידומת DigestInfo, אלא רק ריפוד PKCS#1. האלגוריתם הזה הוצא משימוש, ומגרסה 109 ואילך, Chrome אף פעם לא יבקש אותו.
"RSASSA_PKCS1_v1_5_SHA1"
מציין את אלגוריתם החתימה RSASSA PKCS#1 v1.5 עם פונקציית הגיבוב SHA-1.
"RSASSA_PKCS1_v1_5_SHA256"
מציין את אלגוריתם החתימה RSASSA PKCS#1 v1.5 עם פונקציית הגיבוב SHA-256.
"RSASSA_PKCS1_v1_5_SHA384"
מציין את אלגוריתם החתימה RSASSA PKCS#1 v1.5 עם פונקציית הגיבוב SHA-384.
"RSASSA_PKCS1_v1_5_SHA512"
מציין את אלגוריתם החתימה RSASSA PKCS#1 v1.5 עם פונקציית הגיבוב SHA-512.
RSASSA_PSS_SHA256
מציין את אלגוריתם החתימה RSASSA PSS עם פונקציית הגיבוב SHA-256, פונקציית יצירת המסכה MGF1 והמלח באותו גודל כמו הגיבוב.
RSASSA_PSS_SHA384
מציין את אלגוריתם החתימה RSASSA PSS עם פונקציית הגיבוב SHA-384, פונקציית יצירת המסכה MGF1 והמלח באותו גודל כמו הגיבוב.
RSASSA_PSS_SHA512
מציין את אלגוריתם החתימה RSASSA PSS עם פונקציית הגיבוב SHA-512, פונקציית יצירת המסכה MGF1 והמלח באותו גודל כמו הגיבוב.
CertificateInfo
מאפיינים
- אישור
ArrayBuffer
חייב להיות קידוד DER של אישור X.509. בשלב הזה יש תמיכה רק באישורים של מפתחות RSA.
- supportedHashes
Hash[]
הערך צריך להיות מוגדר לכל הגיבובים שנתמכים באישור הזה. התוסף הזה יבקש חתימות רק על תמציות (digest) שחושבו באמצעות אחד מאלגוריתמי הגיבוב האלה. הסדר צריך להיות לפי העדפה יורדת של הגיבוב.
CertificatesUpdateRequest
מאפיינים
- certificatesRequestId
number
מזהה הבקשה שיועבר אל
setCertificates
.
ClientCertificateInfo
מאפיינים
- certificateChain
ArrayBuffer[]
הרכיב הראשון במערך צריך להיות קידוד DER של אישור הלקוח X.509.
הוא חייב לכלול אישור אחד בלבד.
- supportedAlgorithms
אלגוריתם[]
כל האלגוריתמים שנתמכים באישור הזה. התוסף יבקש חתימות רק באמצעות אחד מהאלגוריתמים האלה.
Error
סוגי השגיאות שהתוסף יכול לדווח עליהן.
ערך
"GENERAL_ERROR"
Hash
הוצא משימוש. הוחלף על ידי Algorithm
.
Enum
"MD5_SHA1"
מציין את אלגוריתמי הגיבוב MD5 ו-SHA1.
"SHA1"
מציין את אלגוריתם הגיבוב SHA1.
"SHA256"
מציין את אלגוריתם הגיבוב SHA256.
"SHA384"
מציין את אלגוריתם הגיבוב SHA384.
'SHA512'
מציין את אלגוריתם הגיבוב SHA512.
PinRequestErrorType
סוגי השגיאות שיכולים להיות מוצגים למשתמש דרך הפונקציה requestPin.
Enum
INVALID_PIN
מציין שקוד האימות לא תקין.
INVALID_PUK
מציין שה-PUK לא תקין.
"MAX_ATTEMPTS_EXCEEDED"
מציין שחרגתם ממספר הניסיונות המקסימלי.
"UNKNOWN_ERROR"
מציין שלא ניתן לייצג את השגיאה באמצעות הסוגים שלמעלה.
PinRequestType
סוג הקוד שהתוסף מבקש באמצעות הפונקציה requestPin.
Enum
"PIN"
מציין שהקוד המבוקש הוא קוד אימות.
PUK
מציין שהקוד המבוקש הוא קוד PUK.
PinResponseDetails
מאפיינים
- userInput
מחרוזת אופציונלי
הקוד שסיפק המשתמש. הערך ריק אם המשתמש סגר את תיבת הדו-שיח או אם אירעה שגיאה אחרת.
ReportSignatureDetails
מאפיינים
- error
"GENERAL_ERROR"
אופציונלישגיאה שאירעה במהלך יצירת החתימה, אם יש כזו.
- signRequestId
number
מזהה הבקשה שהתקבל דרך האירוע
onSignatureRequested
. - signature
ArrayBuffer אופציונלי
החתימה, אם היא נוצרה בהצלחה.
RequestPinDetails
מאפיינים
- attemptsLeft
מספר אופציונלי
מספר הניסיונות שנותרו. המידע הזה מסופק כדי שכל ממשק משתמש יוכל להציג אותו למשתמש. לא צפוי ש-Chrome יאכוף את זה. במקום זאת, התוסף צריך לקרוא ל-stopPinRequest עם errorType = MAX_ATTEMPTS_EXCEEDED כשהמספר של בקשות קוד האימות חורג מהמותר.
- errorType
PinRequestErrorType אופציונלי
תבנית השגיאה שמוצגת למשתמש. צריך להגדיר את הערך הזה אם הבקשה הקודמת נכשלה, כדי להודיע למשתמש על סיבת הכישלון.
- requestType
PinRequestType אופציונלי
סוג הקוד המבוקש. ברירת המחדל היא PIN.
- signRequestId
number
המזהה שניתן על ידי Chrome ב-SignRequest.
SetCertificatesDetails
מאפיינים
- certificatesRequestId
מספר אופציונלי
כשמפעילים את הפונקציה בתגובה ל-
onCertificatesUpdateRequested
, היא צריכה להכיל את הערךcertificatesRequestId
שהתקבל. אחרת, צריך להגדיר את הערך כ-unset. - clientCertificates
רשימה של אישורי לקוח שזמינים כרגע.
- error
"GENERAL_ERROR"
אופציונלישגיאה שאירעה במהלך חילוץ האישורים, אם יש. השגיאה הזו תוצג למשתמש כשצריך.
SignatureRequest
מאפיינים
- אלגוריתם
אלגוריתם החתימה שבו יש להשתמש.
- אישור
ArrayBuffer
קידוד DER של אישור X.509. התוסף צריך לחתום על
input
באמצעות המפתח הפרטי המשויך. - קלט
ArrayBuffer
הנתונים שצריך לחתום עליהם. חשוב לזכור שהנתונים לא מגובבים.
- signRequestId
number
מזהה הבקשה שיועבר אל
reportSignature
.
SignRequest
מאפיינים
- אישור
ArrayBuffer
קידוד DER של אישור X.509. התוסף צריך לחתום על
digest
באמצעות המפתח הפרטי המשויך. - תקציר (digest)
ArrayBuffer
התקציר שצריך לחתום עליו.
- hash
מפנה לאלגוריתם הגיבוב ששימש ליצירת
digest
. - signRequestId
number
Chrome 57 ואילךהמזהה הייחודי שבו התוסף צריך להשתמש אם הוא צריך להפעיל method שדורשת אותו, למשל requestPin.
StopPinRequestDetails
מאפיינים
- errorType
PinRequestErrorType אופציונלי
תבנית השגיאה. אם הוא קיים, הוא מוצג למשתמש. השדה הזה אמור להכיל את הסיבה להפסקת התהליך אם הוא נגרם על ידי שגיאה, למשל MAX_ATTEMPTS_EXCEEDED.
- signRequestId
number
המזהה שניתן על ידי Chrome ב-SignRequest.
Methods
reportSignature()
chrome.certificateProvider.reportSignature(
details: ReportSignatureDetails,
): Promise<void>
צריך להתקשר בתגובה לonSignatureRequested
.
בסופו של דבר, התוסף חייב לקרוא לפונקציה הזו לכל אירוע onSignatureRequested
. הטמעת ה-API תפסיק להמתין לקריאה הזו אחרי זמן מסוים, ותגיב בשגיאת זמן קצוב לתפוגה כשהפונקציה הזו תיקרא.
פרמטרים
- פרטים
החזרות
-
Promise<void>
Chrome 96 ואילך
requestPin()
chrome.certificateProvider.requestPin(
details: RequestPinDetails,
): Promise<PinResponseDetails | undefined>
המערכת מבקשת מהמשתמש להזין את קוד האימות. מותרת רק בקשה אחת בכל פעם. הבקשות שמונפקות בזמן שמתבצע תהליך אחר נדחות. אם תהליך אחר מתבצע, התוסף צריך לנסות שוב מאוחר יותר.
פרמטרים
- פרטים
מכיל את הפרטים של תיבת הדו-שיח המבוקשת.
החזרות
-
Promise<PinResponseDetails | undefined>
Chrome 96 ואילך
setCertificates()
chrome.certificateProvider.setCertificates(
details: SetCertificatesDetails,
): Promise<void>
מגדירה רשימה של אישורים לשימוש בדפדפן.
התוסף צריך לקרוא לפונקציה הזו אחרי האתחול, וגם בכל שינוי במערך האישורים שזמינים כרגע. בנוסף, התוסף צריך לקרוא לפונקציה הזו בתגובה ל-onCertificatesUpdateRequested
בכל פעם שהאירוע הזה מתקבל.
פרמטרים
- פרטים
האישורים להגדרה. המערכת תתעלם מאישורים לא תקינים.
החזרות
-
Promise<void>
Chrome 96 ואילך
stopPinRequest()
chrome.certificateProvider.stopPinRequest(
details: StopPinRequestDetails,
): Promise<void>
עוצר את בקשת ה-PIN שהופעלה על ידי הפונקציה requestPin
.
פרמטרים
- פרטים
הפרטים על הסיבה להפסקת זרימת הבקשה.
החזרות
-
Promise<void>
Chrome 96 ואילך
אירועים
onCertificatesUpdateRequested
chrome.certificateProvider.onCertificatesUpdateRequested.addListener(
callback: function,
)
האירוע הזה מופעל אם האישורים שהוגדרו באמצעות setCertificates
לא מספיקים או אם הדפדפן מבקש מידע מעודכן. התוסף צריך לקרוא ל-setCertificates
עם רשימת האישורים המעודכנת ועם certificatesRequestId
שהתקבל.
פרמטרים
- callback
פונקציה
הפרמטר
callback
נראה כך:(request: CertificatesUpdateRequest) => void
onSignatureRequested
chrome.certificateProvider.onSignatureRequested.addListener(
callback: function,
)
האירוע הזה מופעל בכל פעם שהדפדפן צריך לחתום על הודעה באמצעות אישור שסופק על ידי התוסף הזה דרך setCertificates
.
התוסף צריך לחתום על נתוני הקלט מ-request
באמצעות האלגוריתם המתאים והמפתח הפרטי, ולהחזיר אותם על ידי קריאה ל-reportSignature
עם signRequestId
שהתקבל.
פרמטרים
- callback
פונקציה
הפרמטר
callback
נראה כך:(request: SignatureRequest) => void
- בקשה
-