توضیحات
از این API برای نمایش گواهیها در پلتفرم استفاده کنید که میتواند از این گواهیها برای احراز هویت TLS استفاده کند.
مجوزها
certificateProvider
در دسترس بودن
استفاده
استفاده معمولی از این API برای نمایش گواهیهای سرویس گیرنده در ChromeOS مراحل زیر را دنبال میکند:
- برنامه افزودنی برای رویدادهای onCertificatesUpdateRequested و onSignatureRequested ثبت می شود.
- برنامه افزودنی setCertificates را فراخوانی می کند تا لیست اولیه گواهی ها را پس از مقداردهی اولیه ارائه کند.
- برنامه افزودنی تغییرات لیست گواهیهای موجود را نظارت میکند و setCertificates را فرا میخواند تا مرورگر را از هر تغییری مطلع کند.
- در طی یک دست دادن TLS، مرورگر یک درخواست گواهی مشتری دریافت می کند. با یک رویداد onCertificatesUpdateRequested ، مرورگر از برنامه افزودنی می خواهد تا تمام گواهی هایی را که در حال حاضر ارائه می کند گزارش دهد.
- افزونه با استفاده از روش setCertificates با گواهیهای موجود در حال حاضر گزارش میدهد.
- مرورگر همه گواهیهای موجود را با درخواست گواهی مشتری از میزبان راه دور مطابقت میدهد. موارد منطبق در یک گفتگوی انتخاب به کاربر ارائه می شوند.
- کاربر می تواند یک گواهی را انتخاب کند و در نتیجه احراز هویت را تایید کند یا احراز هویت را لغو کند.
- اگر کاربر احراز هویت را لغو کند یا هیچ گواهی با درخواست مطابقت نداشته باشد، احراز هویت مشتری TLS لغو می شود.
- در غیر این صورت، اگر کاربر احراز هویت را با گواهی ارائه شده توسط این برنامه افزودنی تأیید کند، مرورگر از برنامه افزودنی درخواست می کند تا داده ها را برای ادامه دست دادن TLS امضا کند. درخواست به عنوان یک رویداد onSignatureRequested ارسال می شود.
- این رویداد حاوی داده های ورودی است، اعلام می کند که کدام الگوریتم باید برای تولید امضا استفاده شود، و به یکی از گواهی هایی که توسط این برنامه افزودنی گزارش شده است اشاره دارد. برنامه افزودنی باید با استفاده از کلید خصوصی مرتبط با گواهی ارجاع شده، امضایی برای داده های داده شده ایجاد کند. ایجاد امضا ممکن است نیاز به پیشفرض DigestInfo و اضافه کردن نتیجه قبل از امضای واقعی داشته باشد.
- افزونه با استفاده از روش ReportSignature امضا را به مرورگر باز میفرستد. اگر امضا قابل محاسبه نبود، روش باید بدون امضا فراخوانی شود.
- اگر امضا ارائه شده باشد، مرورگر دست دادن TLS را تکمیل می کند.
توالی واقعی مراحل می تواند متفاوت باشد. برای مثال، اگر از خطمشی سازمانی برای انتخاب خودکار گواهی استفاده شود، از کاربر خواسته نمیشود که گواهی را انتخاب کند (به AutoSelectCertificateForUrls و خطمشیهای Chrome برای کاربران مراجعه کنید).
در Extension، این می تواند شبیه قطعه زیر باشد:
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_PKCS1_v1_5_SHA1" "RSASSA_PKCS1_v1_5_SHA256" "RSASSA_PKCS1_v1_5_SHA384" "RSASSA_PKCS1_v1_5_SHA512" "RSASSA_PSS_SHA256" "RSASSA_PSS_SHA384" "RSASSA_PSS_SHA512"
الگوریتم امضای RSASSA PKCS#1 v1.5 را با هش MD5-SHA-1 مشخص می کند. برنامه افزودنی نباید پیشوند DigestInfo داشته باشد، بلکه فقط باید بالشتک PKCS#1 را اضافه کند. این الگوریتم منسوخ شده است و از نسخه 109 هرگز توسط Chrome درخواست نخواهد شد.
الگوریتم امضای RSASSA PKCS#1 v1.5 را با تابع هش SHA-1 مشخص می کند.
الگوریتم امضای RSASSA PKCS#1 v1.5 را با تابع هش SHA-256 مشخص می کند.
الگوریتم امضای RSASSA PKCS#1 v1.5 را با تابع هش SHA-384 مشخص می کند.
الگوریتم امضای RSASSA PKCS#1 v1.5 را با تابع هش SHA-512 مشخص می کند.
الگوریتم امضای RSASSA PSS را با تابع هش SHA-256، تابع تولید ماسک MGF1 و نمک هم اندازه هش مشخص می کند.
الگوریتم امضای RSASSA PSS را با تابع هش SHA-384، تابع تولید ماسک MGF1 و نمک هم اندازه هش مشخص می کند.
الگوریتم امضای RSASSA PSS را با تابع هش SHA-512، تابع تولید ماسک MGF1 و نمک هم اندازه هش مشخص می کند.
CertificateInfo
خواص
- گواهی
ArrayBuffer
باید رمزگذاری DER گواهی X.509 باشد. در حال حاضر، فقط گواهیهای کلیدهای RSA پشتیبانی میشوند.
- هش ها را پشتیبانی کرد
هش []
باید روی همه هش های پشتیبانی شده برای این گواهی تنظیم شود. این برنامه افزودنی فقط برای امضای خلاصه های محاسبه شده با یکی از این الگوریتم های هش درخواست می شود. این باید به ترتیب کاهش اولویت هش باشد.
CertificatesUpdateRequest
خواص
- شناسه درخواست گواهی
شماره
درخواست شناسه برای ارسال به
setCertificates
.
ClientCertificateInfo
خواص
- CertificCchain
ArrayBuffer[]
آرایه باید حاوی رمزگذاری DER گواهی مشتری X.509 به عنوان اولین عنصر باشد.
این باید دقیقاً شامل یک گواهی باشد.
- الگوریتم های پشتیبانی شده
الگوریتم []
همه الگوریتم های پشتیبانی شده برای این گواهی. از برنامه افزودنی فقط با استفاده از یکی از این الگوریتم ها برای امضا درخواست می شود.
Error
انواع خطاهایی که برنامه افزودنی می تواند گزارش کند.
ارزش
"GENERAL_ERROR"
Hash
منسوخ شده است. جایگزین Algorithm
Enum
"MD5_SHA1" "SHA1" "SHA256" "SHA384" "SHA512"
الگوریتم های هش MD5 و SHA1 را مشخص می کند.
الگوریتم هش SHA1 را مشخص می کند.
الگوریتم هش SHA256 را مشخص می کند.
الگوریتم هش SHA384 را مشخص می کند.
الگوریتم هش SHA512 را مشخص می کند.
PinRequestErrorType
انواع خطاهایی که می توان از طریق تابع requestPin به کاربر ارائه داد.
Enum
"INVALID_PIN" "INVALID_PUK" "MAX_ATTEMPTS_EXCEEDED" "UNKNOWN_ERROR"
مشخص می کند که پین نامعتبر است.
مشخص می کند که PUK نامعتبر است.
مشخص می کند که از حداکثر تعداد تلاش بیشتر شده است.
مشخص می کند که خطا را نمی توان با انواع بالا نشان داد.
PinRequestType
نوع کد درخواست شده توسط افزونه با تابع requestPin.
Enum
"پین" "PUK"
مشخص می کند که کد درخواستی یک پین است.
مشخص می کند که کد درخواستی PUK است.
PinResponseDetails
خواص
- userInput
رشته اختیاری
کد ارائه شده توسط کاربر اگر کاربر کادر گفتگو را ببندد یا خطای دیگری رخ دهد خالی است.
ReportSignatureDetails
خواص
- خطا
"GENERAL_ERROR"
اختیاریخطایی که هنگام ایجاد امضا رخ داده است، در صورت وجود.
- signRequestId
شماره
شناسه درخواستی که از طریق رویداد
onSignatureRequested
دریافت شد. - امضا
ArrayBuffer اختیاری است
امضا، اگر با موفقیت ایجاد شود.
RequestPinDetails
خواص
- تلاش چپ
شماره اختیاری
تعداد تلاش های باقی مانده این ارائه شده است تا هر UI بتواند این اطلاعات را به کاربر ارائه دهد. انتظار نمی رود Chrome این مورد را اعمال کند، در عوض stopPinRequest باید توسط برنامه افزودنی با errorType = MAX_ATTEMPTS_EXCEEDED زمانی که تعداد درخواست های پین بیشتر شد فراخوانی شود.
- نوع خطا
PinRequestErrorType اختیاری است
الگوی خطا به کاربر نمایش داده می شود. اگر درخواست قبلی ناموفق بود، این باید تنظیم شود تا کاربر از دلیل شکست مطلع شود.
- نوع درخواست
PinRequestType اختیاری است
نوع کد درخواستی پیش فرض پین است.
- signRequestId
شماره
شناسه ارائه شده توسط Chrome در SignRequest.
SetCertificatesDetails
خواص
- شناسه درخواست گواهی
شماره اختیاری
هنگامی که در پاسخ به
onCertificatesUpdateRequested
فراخوانی می شود، باید حاوی مقدارcertificatesRequestId
باشد. در غیر این صورت، باید تنظیم نشده باشد. - گواهی های مشتری
فهرست گواهیهای مشتری موجود در حال حاضر.
- خطا
"GENERAL_ERROR"
اختیاریخطایی که هنگام استخراج گواهیها رخ داد، در صورت وجود. این خطا در صورت لزوم برای کاربر ظاهر می شود.
SignatureRequest
خواص
- الگوریتم
الگوریتم امضا مورد استفاده
- گواهی
ArrayBuffer
رمزگذاری DER یک گواهی X.509. برنامه افزودنی باید
input
با استفاده از کلید خصوصی مرتبط امضا کند. - ورودی
ArrayBuffer
داده هایی که باید امضا شود. توجه داشته باشید که داده ها هش نشده اند.
- signRequestId
شماره
درخواست شناسه برای ارسال به
reportSignature
.
SignRequest
خواص
- گواهی
ArrayBuffer
رمزگذاری DER یک گواهی X.509. برنامه افزودنی باید
digest
با استفاده از کلید خصوصی مرتبط امضا کند. - هضم
ArrayBuffer
خلاصه ای که باید امضا شود.
- هش
به الگوریتم هش اشاره دارد که برای ایجاد
digest
استفاده شده است. - signRequestId
شماره
Chrome 57+شناسه منحصربهفرد مورد استفاده توسط برنامه افزودنی در صورت نیاز به فراخوانی روشی که به آن نیاز دارد، به عنوان مثال requestPin.
StopPinRequestDetails
خواص
- نوع خطا
PinRequestErrorType اختیاری است
الگوی خطا در صورت وجود به کاربر نمایش داده می شود. در نظر گرفته شده است که دلیل توقف جریان را در صورتی که ناشی از یک خطا باشد شامل شود، به عنوان مثال MAX_ATTEMPTS_EXCEEDED.
- signRequestId
شماره
شناسه ارائه شده توسط Chrome در SignRequest.
روش ها
reportSignature()
chrome.certificateProvider.reportSignature(
details: ReportSignatureDetails,
callback?: function,
)
باید به عنوان پاسخی به onSignatureRequested
فراخوانی شود.
برنامه افزودنی باید در نهایت این تابع را برای هر رویداد onSignatureRequested
فراخوانی کند. اجرای API پس از مدتی انتظار برای این تماس را متوقف میکند و زمانی که این تابع فراخوانی میشود، با خطای مهلت زمانی پاسخ میدهد.
پارامترها
- جزئیات
- پاسخ به تماس
عملکرد اختیاری
پارامتر
callback
به نظر می رسد:() => void
برمی گرداند
قول<باطل>
Chrome 96+Promises فقط برای Manifest V3 و نسخههای جدیدتر پشتیبانی میشود، پلتفرمهای دیگر باید از callback استفاده کنند.
requestPin()
chrome.certificateProvider.requestPin(
details: RequestPinDetails,
callback?: function,
)
پین را از کاربر درخواست می کند. فقط یک درخواست در حال انجام در هر زمان مجاز است. درخواست های صادر شده در حالی که جریان دیگری در جریان است رد می شود. این مسئولیت برنامه افزودنی است که اگر جریان دیگری در حال انجام است، بعداً دوباره امتحان کنید.
پارامترها
- جزئیات
حاوی جزئیات مربوط به گفتگوی درخواستی است.
- پاسخ به تماس
عملکرد اختیاری
پارامتر
callback
به نظر می رسد:(details?: PinResponseDetails) => void
- جزئیات
PinResponseDetails اختیاری است
برمی گرداند
Promise< PinResponseDetails | تعریف نشده>
Chrome 96+Promises فقط برای Manifest V3 و نسخههای جدیدتر پشتیبانی میشود، پلتفرمهای دیگر باید از callback استفاده کنند.
setCertificates()
chrome.certificateProvider.setCertificates(
details: SetCertificatesDetails,
callback?: function,
)
فهرستی از گواهی ها را برای استفاده در مرورگر تنظیم می کند.
برنامه افزودنی باید این تابع را پس از مقداردهی اولیه و با هر تغییر در مجموعه گواهی های موجود در حال حاضر فراخوانی کند. افزونه همچنین باید این تابع را در پاسخ به onCertificatesUpdateRequested
هر بار که این رویداد دریافت میکند، فراخوانی کند.
پارامترها
- جزئیات
گواهی برای تنظیم گواهینامه های نامعتبر نادیده گرفته می شوند.
- پاسخ به تماس
عملکرد اختیاری
پارامتر
callback
به نظر می رسد:() => void
برمی گرداند
قول<باطل>
Chrome 96+Promises فقط برای Manifest V3 و نسخههای جدیدتر پشتیبانی میشود، پلتفرمهای دیگر باید از callback استفاده کنند.
stopPinRequest()
chrome.certificateProvider.stopPinRequest(
details: StopPinRequestDetails,
callback?: function,
)
درخواست پین آغاز شده توسط تابع requestPin
را متوقف می کند.
پارامترها
- جزئیات
حاوی جزئیات در مورد دلیل توقف جریان درخواست است.
- پاسخ به تماس
عملکرد اختیاری
پارامتر
callback
به نظر می رسد:() => void
برمی گرداند
قول<باطل>
Chrome 96+Promises فقط برای Manifest V3 و نسخههای جدیدتر پشتیبانی میشود، پلتفرمهای دیگر باید از callback استفاده کنند.
رویدادها
onCertificatesRequested
chrome.certificateProvider.onCertificatesRequested.addListener(
callback: function,
)
به جای آن از onCertificatesUpdateRequested
استفاده کنید.
هر بار که مرورگر لیست فعلی گواهیهای ارائه شده توسط این برنامه افزودنی را درخواست میکند، این رویداد فعال میشود. برنامه افزودنی باید دقیقاً یک بار با لیست فعلی گواهیها، reportCallback
فراخوانی کند.
پارامترها
- پاسخ به تماس
تابع
پارامتر
callback
به نظر می رسد:(reportCallback: function) => void
- گزارش تماس برگشتی
تابع
پارامتر
reportCallback
به شکل زیر است:(certificates: CertificateInfo[], callback: function) => void
- گواهینامه ها
- پاسخ به تماس
تابع
پارامتر
callback
به نظر می رسد:(rejectedCertificates: ArrayBuffer[]) => void
- گواهی های رد شده
ArrayBuffer[]
onCertificatesUpdateRequested
chrome.certificateProvider.onCertificatesUpdateRequested.addListener(
callback: function,
)
اگر گواهیهای تنظیمشده از طریق setCertificates
ناکافی باشند یا مرورگر اطلاعات بهروز شده را درخواست کند، این رویداد فعال میشود. برنامه افزودنی باید setCertificates
با لیست بهروزشده گواهیها و certificatesRequestId
فراخوانی کند.
پارامترها
- پاسخ به تماس
تابع
پارامتر
callback
به نظر می رسد:(request: CertificatesUpdateRequest) => void
- درخواست کنید
onSignatureRequested
chrome.certificateProvider.onSignatureRequested.addListener(
callback: function,
)
هر بار که مرورگر نیاز به امضای پیامی با استفاده از گواهی ارائه شده توسط این برنامه افزودنی از طریق setCertificates
دارد، این رویداد فعال میشود.
برنامه افزودنی باید داده های ورودی request
را با استفاده از الگوریتم مناسب و کلید خصوصی امضا کند و با فراخوانی reportSignature
با signRequestId
دریافتی آن را بازگرداند.
پارامترها
- پاسخ به تماس
تابع
پارامتر
callback
به نظر می رسد:(request: SignatureRequest) => void
- درخواست کنید
onSignDigestRequested
chrome.certificateProvider.onSignDigestRequested.addListener(
callback: function,
)
به جای آن از onSignatureRequested
استفاده کنید.
هر بار که مرورگر نیاز به امضای پیامی با استفاده از گواهی ارائه شده توسط این برنامه افزودنی در پاسخ به رویداد onCertificatesRequested
دارد، این رویداد فعال می شود. برنامه افزودنی باید داده های request
را با استفاده از الگوریتم مناسب و کلید خصوصی امضا کند و با فراخوانی reportCallback
آن را برگرداند. reportCallback
باید دقیقاً یک بار فراخوانی شود.
پارامترها
- پاسخ به تماس
تابع
پارامتر
callback
به نظر می رسد:(request: SignRequest, reportCallback: function) => void
- درخواست کنید
- گزارش تماس برگشتی
تابع
Chrome 47+پارامتر
reportCallback
به شکل زیر است:(signature?: ArrayBuffer) => void
- امضا
ArrayBuffer اختیاری است