browser.certificateProvider

ब्यौरा

इस एपीआई का इस्तेमाल करके, प्लैटफ़ॉर्म पर सर्टिफ़िकेट उपलब्ध कराएं. प्लैटफ़ॉर्म, इन सर्टिफ़िकेट का इस्तेमाल टीएलएस की पुष्टि करने के लिए कर सकता है.

अनुमतियां

certificateProvider

उपलब्धता

Chrome 46 और इसके बाद के वर्शन Chrome 148 और इसके बाद के वर्शन के लिए browser.* सिर्फ़ ChromeOS के लिए

कॉन्सेप्ट और इस्तेमाल

ChromeOS को क्लाइंट सर्टिफ़िकेट दिखाने के लिए, इस एपीआई का इस्तेमाल आम तौर पर इन चरणों के मुताबिक किया जाता है:

  • एक्सटेंशन, onCertificatesUpdateRequested और onSignatureRequested इवेंट के लिए रजिस्टर करता है.
  • एक्सटेंशन, शुरू होने के बाद सर्टिफ़िकेट की शुरुआती सूची देने के लिए, setCertificates() को कॉल करता है.
  • एक्सटेंशन, उपलब्ध सर्टिफ़िकेट की सूची में होने वाले बदलावों पर नज़र रखता है. साथ ही, हर बदलाव के बारे में ब्राउज़र को सूचना देने के लिए, setCertificates() को कॉल करता है.
  • टीएलएस हैंडशेक के दौरान, ब्राउज़र को क्लाइंट सर्टिफ़िकेट का अनुरोध मिलता है. onCertificatesUpdateRequested इवेंट की मदद से, ब्राउज़र एक्सटेंशन से उन सभी सर्टिफ़िकेट की जानकारी देने के लिए कहता है जो वह फ़िलहाल उपलब्ध कराता है.
  • एक्सटेंशन, setCertificates() तरीके का इस्तेमाल करके, फ़िलहाल उपलब्ध सर्टिफ़िकेट की जानकारी देता है.
  • ब्राउज़र, उपलब्ध सभी सर्टिफ़िकेट को रिमोट होस्ट से मिले क्लाइंट सर्टिफ़िकेट के अनुरोध से मैच करता है. उपयोगकर्ता को एक डायलॉग बॉक्स में, मिलते-जुलते नतीजे दिखाए जाते हैं.
  • उपयोगकर्ता कोई सर्टिफ़िकेट चुन सकता है. इसके बाद, वह पुष्टि करने की प्रक्रिया को मंज़ूरी दे सकता है या उसे रद्द कर सकता है.
सर्टिफ़िकेट चुनने का डायलॉग बॉक्स
सर्टिफ़िकेट चुनने का डायलॉग बॉक्स.
  • अगर उपयोगकर्ता, पुष्टि करने की प्रोसेस को रद्द कर देता है या अनुरोध से कोई सर्टिफ़िकेट मैच नहीं होता है, तो टीएलएस क्लाइंट की पुष्टि करने की प्रोसेस रद्द कर दी जाती है.
  • अगर उपयोगकर्ता इस एक्सटेंशन से मिले सर्टिफ़िकेट की मदद से पुष्टि करने की अनुमति देता है, तो ब्राउज़र, एक्सटेंशन से डेटा पर हस्ताक्षर करने का अनुरोध करता है, ताकि टीएलएस हैंडशेक जारी रखा जा सके. अनुरोध को onSignatureRequested इवेंट के तौर पर भेजा जाता है.
  • इस इवेंट में इनपुट डेटा होता है. साथ ही, यह बताता है कि हस्ताक्षर जनरेट करने के लिए किस एल्गोरिदम का इस्तेमाल करना है. इसके अलावा, यह इस एक्सटेंशन से रिपोर्ट किए गए किसी एक सर्टिफ़िकेट के बारे में बताता है. एक्सटेंशन को दिए गए डेटा के लिए, रेफ़रंस के तौर पर दिए गए सर्टिफ़िकेट से जुड़े निजी पासकोड का इस्तेमाल करके एक हस्ताक्षर बनाना होगा. हस्ताक्षर बनाने के लिए, हस्ताक्षर करने से पहले, DigestInfo को जोड़ना और नतीजे को पैड करना ज़रूरी हो सकता है.
  • एक्सटेंशन, reportSignature() तरीके का इस्तेमाल करके, हस्ताक्षर को ब्राउज़र पर वापस भेजता है. अगर हस्ताक्षर का हिसाब नहीं लगाया जा सका, तो तरीके को बिना हस्ताक्षर के कॉल करना होगा.
  • अगर हस्ताक्षर दिया गया है, तो ब्राउज़र टीएलएस हैंडशेक की प्रोसेस पूरी करता है.

हालांकि, चरणों का असल क्रम अलग हो सकता है. उदाहरण के लिए, अगर सर्टिफ़िकेट को अपने-आप चुनने के लिए एंटरप्राइज़ नीति का इस्तेमाल किया जाता है, तो उपयोगकर्ता से सर्टिफ़िकेट चुनने के लिए नहीं कहा जाएगा. इसके बारे में ज़्यादा जानने के लिए, 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() {
  browser.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.
  browser.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.
    browser.certificateProvider.reportSignature({
      signRequestId: request.signRequestId,
      error: 'GENERAL_ERROR'
    });
    return;
  }

  const signature = signUnhashedData(key, request.input, request.algorithm);
  browser.certificateProvider.reportSignature({
    signRequestId: request.signRequestId,
    signature: signature
  });
}

browser.certificateProvider.onCertificatesUpdateRequested.addListener(
    handleCertificatesUpdateRequest);
browser.certificateProvider.onSignatureRequested.addListener(
    handleSignatureRequest);

टाइप

Algorithm

Chrome 86+ Chrome 148 से, browser.*

इस्तेमाल किए जा सकने वाले क्रिप्टोग्राफ़िक सिग्नेचर एल्गोरिदम के टाइप.

Enum

"RSASSA_PKCS1_v1_5_MD5_SHA1"
यह MD5-SHA-1 हैशिंग के साथ RSASSA PKCS#1 v1.5 सिग्नेचर एल्गोरिदम के बारे में बताता है. एक्सटेंशन को DigestInfo प्रीफ़िक्स नहीं जोड़ना चाहिए. उसे सिर्फ़ PKCS#1 पैडिंग जोड़नी चाहिए. इस एल्गोरिदम का इस्तेमाल नहीं किया जा सकता. Chrome के वर्शन 109 से, इस एल्गोरिदम का अनुरोध कभी नहीं किया जाएगा.

"RSASSA_PKCS1_v1_5_SHA1"
यह SHA-1 हैश फ़ंक्शन के साथ RSASSA PKCS#1 v1.5 सिग्नेचर एल्गोरिदम के बारे में बताता है.

"RSASSA_PKCS1_v1_5_SHA256"
यह SHA-256 हैशिंग फ़ंक्शन के साथ RSASSA PKCS#1 v1.5 सिग्नेचर एल्गोरिदम के बारे में बताता है.

"RSASSA_PKCS1_v1_5_SHA384"
यह SHA-384 हैशिंग फ़ंक्शन के साथ RSASSA PKCS#1 v1.5 सिग्नेचर एल्गोरिदम के बारे में बताता है.

"RSASSA_PKCS1_v1_5_SHA512"
यह SHA-512 हैशिंग फ़ंक्शन के साथ RSASSA PKCS#1 v1.5 सिग्नेचर एल्गोरिदम के बारे में बताता है.

"RSASSA_PSS_SHA256"
यह SHA-256 हैशिंग फ़ंक्शन, MGF1 मास्क जनरेशन फ़ंक्शन, और हैश के साइज़ के सॉल्ट के साथ RSASSA PSS सिग्नेचर एल्गोरिदम के बारे में बताता है.

"RSASSA_PSS_SHA384"
यह SHA-384 हैशिंग फ़ंक्शन, MGF1 मास्क जनरेशन फ़ंक्शन, और हैश के साइज़ के सॉल्ट के साथ RSASSA PSS सिग्नेचर एल्गोरिदम के बारे में बताता है.

"RSASSA_PSS_SHA512"
यह SHA-512 हैशिंग फ़ंक्शन, MGF1 मास्क जनरेशन फ़ंक्शन, और हैश के साइज़ के सॉल्ट के साथ RSASSA PSS सिग्नेचर एल्गोरिदम के बारे में बताता है.

CertificateInfo

प्रॉपर्टी

  • सर्टिफ़िकेट

    ArrayBuffer

    यह X.509 सर्टिफ़िकेट की डीईआर एन्कोडिंग होनी चाहिए. फ़िलहाल, सिर्फ़ आरएसए कुंजियों के सर्टिफ़िकेट इस्तेमाल किए जा सकते हैं.

  • supportedHashes

    इसे इस सर्टिफ़िकेट के लिए, इस्तेमाल किए जा सकने वाले सभी हैश पर सेट किया जाना चाहिए. इस एक्सटेंशन के लिए, सिर्फ़ इनमें से किसी एक हैश एल्गोरिदम का इस्तेमाल करके कैलकुलेट किए गए डाइजेस्ट के हस्ताक्षर मांगे जाएंगे. यह हैश की प्राथमिकता के घटते क्रम में होना चाहिए.

CertificatesUpdateRequest

Chrome 86+ Chrome 148 से, browser.*

प्रॉपर्टी

  • certificatesRequestId

    संख्या

    अनुरोध का आइडेंटिफ़ायर, जिसे setCertificates को पास किया जाना है.

ClientCertificateInfo

Chrome 86+ Chrome 148 से, browser.*

प्रॉपर्टी

  • certificateChain

    ArrayBuffer[]

    अरे में X.509 क्लाइंट सर्टिफ़िकेट की डीईआर एन्कोडिंग, पहले एलिमेंट के तौर पर होनी चाहिए.

    इसमें सिर्फ़ एक सर्टिफ़िकेट होना चाहिए.

  • supportedAlgorithms

    इस सर्टिफ़िकेट के लिए, सभी एल्गोरिदम काम करते हैं. एक्सटेंशन को सिर्फ़ इनमें से किसी एक एल्गोरिदम का इस्तेमाल करके हस्ताक्षर करने के लिए कहा जाएगा.

Error

Chrome 86+ Chrome 148 से, browser.*

एक्सटेंशन किस तरह की गड़बड़ियों की जानकारी दे सकता है.

वैल्यू

"GENERAL_ERROR"

Hash

समर्थन नहीं होना या रुकना. Algorithm से बदला जाएगा.

Enum

"MD5_SHA1"
इससे MD5 और SHA1 हैशिंग एल्गोरिदम के बारे में पता चलता है.

"SHA1"
SHA1 हैशिंग एल्गोरिदम के बारे में बताता है.

"SHA256"
SHA256 हैशिंग एल्गोरिदम के बारे में बताता है.

"SHA384"
SHA384 हैशिंग एल्गोरिदम के बारे में बताता है.

"SHA512"
SHA512 हैशिंग एल्गोरिदम के बारे में बताता है.

PinRequestErrorType

Chrome 57+ browser.* Chrome 148 से

requestPin फ़ंक्शन के ज़रिए, उपयोगकर्ता को किस तरह की गड़बड़ियां दिख सकती हैं.

Enum

"INVALID_PIN"
इससे पता चलता है कि पिन अमान्य है.

"INVALID_PUK"
इससे पता चलता है कि पीयूके अमान्य है.

"MAX_ATTEMPTS_EXCEEDED"
इससे पता चलता है कि कोशिश करने की तय सीमा पार हो गई है.

"UNKNOWN_ERROR"
इससे पता चलता है कि गड़बड़ी को ऊपर दिए गए टाइप के हिसाब से नहीं दिखाया जा सकता.

PinRequestType

Chrome 57+ browser.* Chrome 148 से

requestPin फ़ंक्शन की मदद से, एक्सटेंशन जिस तरह के कोड का अनुरोध कर रहा है.

Enum

"PIN"
इससे पता चलता है कि अनुरोध किया गया कोड एक पिन है.

"PUK"
इससे पता चलता है कि अनुरोध किया गया कोड, PUK है.

PinResponseDetails

Chrome 57+ browser.* Chrome 148 से

प्रॉपर्टी

  • userInput

    string ज़रूरी नहीं

    उपयोगकर्ता ने जो कोड दिया है. अगर उपयोगकर्ता ने डायलॉग बॉक्स बंद कर दिया है या कोई अन्य गड़बड़ी हुई है, तो यह खाली रहता है.

ReportSignatureDetails

Chrome 86+ Chrome 148 से, browser.*

प्रॉपर्टी

  • गड़बड़ी

    "GENERAL_ERROR"
     ज़रूरी नहीं है

    सिग्नेचर जनरेट करते समय हुई गड़बड़ी, अगर कोई हो.

  • signRequestId

    संख्या

    अनुरोध का आइडेंटिफ़ायर, जो onSignatureRequested इवेंट से मिला था.

  • signature

    ArrayBuffer ज़रूरी नहीं

    अगर हस्ताक्षर जनरेट हो गया है, तो वह.

RequestPinDetails

Chrome 57+ browser.* Chrome 148 से

प्रॉपर्टी

  • attemptsLeft

    number ज़रूरी नहीं

    कितनी बार और कोशिश की जा सकती है. यह जानकारी इसलिए दी जाती है, ताकि कोई भी यूज़र इंटरफ़ेस (यूआई) इसे उपयोगकर्ता को दिखा सके. Chrome से इसे लागू करने की उम्मीद नहीं की जाती. इसके बजाय, पिन के अनुरोधों की संख्या ज़्यादा होने पर, एक्सटेंशन को errorType = MAX_ATTEMPTS_EXCEEDED के साथ stopPinRequest को कॉल करना चाहिए.

  • errorType

    PinRequestErrorType ज़रूरी नहीं

    उपयोगकर्ता को गड़बड़ी का टेंप्लेट दिखाया जाता है. अगर पिछला अनुरोध पूरा नहीं हो पाया, तो इसे सेट किया जाना चाहिए, ताकि उपयोगकर्ता को अनुरोध पूरा न होने की वजह बताई जा सके.

  • requestType

    PinRequestType ज़रूरी नहीं

    अनुरोध किए गए कोड का टाइप. डिफ़ॉल्ट रूप से, पिन सेट होता है.

  • signRequestId

    संख्या

    SignRequest में Chrome से मिला आईडी.

SetCertificatesDetails

Chrome 86+ Chrome 148 से, browser.*

प्रॉपर्टी

  • certificatesRequestId

    number ज़रूरी नहीं

    onCertificatesUpdateRequested के जवाब में कॉल किए जाने पर, इसमें certificatesRequestId की वैल्यू शामिल होनी चाहिए. अगर ऐसा नहीं है, तो इसे सेट नहीं किया जाना चाहिए.

  • clientCertificates

    फ़िलहाल उपलब्ध क्लाइंट सर्टिफ़िकेट की सूची.

  • गड़बड़ी

    "GENERAL_ERROR"
     ज़रूरी नहीं है

    सर्टिफ़िकेट एक्सट्रैक्ट करते समय हुई गड़बड़ी, अगर कोई हो. यह गड़बड़ी, उपयोगकर्ता को ज़रूरत पड़ने पर दिखेगी.

SignatureRequest

Chrome 86+ Chrome 148 से, browser.*

प्रॉपर्टी

  • एल्‍गोरि‍दम

    इस्तेमाल किया जाने वाला सिग्नेचर एल्गोरिदम.

  • सर्टिफ़िकेट

    ArrayBuffer

    X.509 सर्टिफ़िकेट की डीईआर एन्कोडिंग. एक्सटेंशन को उससे जुड़े निजी पासकोड का इस्तेमाल करके, input पर हस्ताक्षर करना होगा.

  • इनपुट

    ArrayBuffer

    साइन किया जाने वाला डेटा. ध्यान दें कि डेटा हैश नहीं किया गया है.

  • signRequestId

    संख्या

    अनुरोध का आइडेंटिफ़ायर, जिसे reportSignature को पास किया जाना है.

SignRequest

प्रॉपर्टी

  • सर्टिफ़िकेट

    ArrayBuffer

    X.509 सर्टिफ़िकेट की डीईआर एन्कोडिंग. एक्सटेंशन को उससे जुड़े निजी पासकोड का इस्तेमाल करके, digest पर हस्ताक्षर करना होगा.

  • डाइजेस्ट

    ArrayBuffer

    वह डाइजेस्ट जिस पर हस्ताक्षर करना ज़रूरी है.

  • हैश

    यह उस हैश एल्गोरिदम के बारे में बताता है जिसका इस्तेमाल digest बनाने के लिए किया गया था.

  • signRequestId

    संख्या

    Chrome 57+ browser.* Chrome 148 से

    एक्सटेंशन के लिए इस्तेमाल किया जाने वाला यूनीक आईडी, अगर उसे किसी ऐसे तरीके को कॉल करना है जिसके लिए इसकी ज़रूरत है. उदाहरण के लिए, requestPin.

StopPinRequestDetails

Chrome 57+ browser.* Chrome 148 से

प्रॉपर्टी

  • errorType

    PinRequestErrorType ज़रूरी नहीं

    गड़बड़ी का टेंप्लेट. अगर यह मौजूद है, तो इसे उपयोगकर्ता को दिखाया जाता है. इसका मकसद, फ़्लो के रुकने की वजह बताना है. जैसे, MAX_ATTEMPTS_EXCEEDED.

  • signRequestId

    संख्या

    SignRequest में Chrome से मिला आईडी.

तरीके

reportSignature()

Chrome 86+ Chrome 148 से, browser.*
browser.certificateProvider.reportSignature(
  details: ReportSignatureDetails,
)
: Promise<void>

इसे onSignatureRequested के जवाब के तौर पर कॉल किया जाना चाहिए.

एक्सटेंशन को हर onSignatureRequested इवेंट के लिए, इस फ़ंक्शन को कॉल करना होगा. एपीआई लागू होने के बाद, कुछ समय तक इस कॉल का इंतज़ार किया जाएगा. इसके बाद, इस फ़ंक्शन को कॉल करने पर, टाइम आउट की गड़बड़ी का मैसेज दिखेगा.

पैरामीटर

रिटर्न

  • वादा<शून्य>

    Chrome 96+ Chrome 148 से browser.*

requestPin()

Chrome 57+ browser.* Chrome 148 से
browser.certificateProvider.requestPin(
  details: RequestPinDetails,
)
: Promise<PinResponseDetails | undefined>

उपयोगकर्ता से पिन डालने के लिए कहता है. एक बार में सिर्फ़ एक अनुरोध किया जा सकता है. अगर कोई दूसरा फ़्लो चल रहा है, तो इस दौरान किए गए अनुरोधों को अस्वीकार कर दिया जाता है. अगर कोई दूसरा फ़्लो चल रहा है, तो एक्सटेंशन को बाद में फिर से कोशिश करनी होगी.

पैरामीटर

  • विवरण

    इसमें अनुरोध किए गए डायलॉग की जानकारी होती है.

रिटर्न

  • Promise<PinResponseDetails | undefined>

    Chrome 96+ Chrome 148 से browser.*

    यह एक प्रॉमिस दिखाता है, जो उपयोगकर्ता के पिन डालने पर रिज़ॉल्व हो जाता है. अगर डायलॉग बॉक्स का अनुरोध पूरा नहीं हो पाता है, तो गड़बड़ी के साथ अस्वीकार कर देता है. उदाहरण के लिए, उपयोगकर्ता ने डायलॉग बॉक्स को रद्द कर दिया या उसे दिखाने की अनुमति नहीं दी गई.

setCertificates()

Chrome 86+ Chrome 148 से, browser.*
browser.certificateProvider.setCertificates(
  details: SetCertificatesDetails,
)
: Promise<void>

यह नीति, ब्राउज़र में इस्तेमाल किए जाने वाले सर्टिफ़िकेट की सूची सेट करती है.

एक्सटेंशन को इस फ़ंक्शन को शुरू करने के बाद और फ़िलहाल उपलब्ध सर्टिफ़िकेट के सेट में हर बदलाव के बाद कॉल करना चाहिए. एक्सटेंशन को भी इस फ़ंक्शन को कॉल करना चाहिए. ऐसा onCertificatesUpdateRequested इवेंट मिलने पर हर बार किया जाना चाहिए.

पैरामीटर

  • विवरण

    सेट किए जाने वाले सर्टिफ़िकेट. अमान्य सर्टिफ़िकेट को अनदेखा कर दिया जाएगा.

रिटर्न

  • वादा<शून्य>

    Chrome 96+ Chrome 148 से browser.*

    यह एक प्रॉमिस दिखाता है, जो प्रोसेस पूरी होने पर रिज़ॉल्व हो जाता है.

stopPinRequest()

Chrome 57+ browser.* Chrome 148 से
browser.certificateProvider.stopPinRequest(
  details: StopPinRequestDetails,
)
: Promise<void>

requestPin फ़ंक्शन से शुरू किए गए पिन के अनुरोध को रोकता है.

पैरामीटर

  • विवरण

    इसमें अनुरोध के फ़्लो को रोकने की वजह के बारे में जानकारी होती है.

रिटर्न

  • वादा<शून्य>

    Chrome 96+ Chrome 148 से browser.*

    यह एक प्रॉमिस दिखाता है, जो पिन डायलॉग को बंद करने का अनुरोध पूरा होने पर रिज़ॉल्व हो जाता है.

इवेंट

onCertificatesUpdateRequested

Chrome 86+ Chrome 148 से, browser.*
browser.certificateProvider.onCertificatesUpdateRequested.addListener(
  callback: function,
)

यह इवेंट तब ट्रिगर होता है, जब setCertificates की मदद से सेट किए गए सर्टिफ़िकेट काफ़ी नहीं होते या ब्राउज़र, अपडेट की गई जानकारी का अनुरोध करता है. एक्सटेंशन को सर्टिफ़िकेट की अपडेट की गई सूची और मिले certificatesRequestId के साथ setCertificates को कॉल करना होगा.

पैरामीटर

onSignatureRequested

Chrome 86+ Chrome 148 से, browser.*
browser.certificateProvider.onSignatureRequested.addListener(
  callback: function,
)

यह इवेंट तब ट्रिगर होता है, जब ब्राउज़र को setCertificates के ज़रिए इस एक्सटेंशन से मिले सर्टिफ़िकेट का इस्तेमाल करके, किसी मैसेज पर हस्ताक्षर करना होता है.

एक्सटेंशन को सही एल्गोरिदम और निजी पासकोड का इस्तेमाल करके, request से मिले इनपुट डेटा पर हस्ताक्षर करना होगा. इसके बाद, मिले signRequestId के साथ reportSignature को कॉल करके, डेटा को वापस भेजना होगा.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन

    callback पैरामीटर कुछ ऐसा दिखता है:

    (request: SignatureRequest) => void