Beschreibung
Mit dieser API können Sie Zertifikate für die Plattform verfügbar machen, die diese Zertifikate für die TLS-Authentifizierung verwenden kann.
Berechtigungen
certificateProviderVerfügbarkeit
Nutzung
Die typische Verwendung dieser API zum Bereitstellen von Clientzertifikaten für ChromeOS umfasst die folgenden Schritte:
- Die Erweiterung registriert sich für die Ereignisse onCertificatesUpdateRequested und onSignatureRequested.
- Die Erweiterung ruft setCertificates auf, um nach der Initialisierung die erste Liste von Zertifikaten bereitzustellen.
- Die Erweiterung überwacht die Änderungen in der Liste der verfügbaren Zertifikate und ruft setCertificates auf, um den Browser über jede solche Änderung zu informieren.
- Während eines TLS-Handshakes erhält der Browser eine Clientzertifikatsanfrage. Mit dem Ereignis onCertificatesUpdateRequested fordert der Browser die Erweiterung auf, alle Zertifikate zu melden, die sie derzeit bereitstellt.
- Die Erweiterung meldet die derzeit verfügbaren Zertifikate mit der Methode setCertificates zurück.
- Der Browser gleicht alle verfügbaren Zertifikate mit der Clientzertifikatsanfrage des Remotehosts ab. Die Übereinstimmungen werden dem Nutzer in einem Auswahlfeld präsentiert.
- Der Nutzer kann ein Zertifikat auswählen und damit die Authentifizierung genehmigen oder abbrechen.

- Wenn der Nutzer die Authentifizierung abbricht oder kein Zertifikat mit der Anfrage übereinstimmt, wird die TLS-Clientauthentifizierung abgebrochen.
- Wenn der Nutzer die Authentifizierung mit einem von dieser Erweiterung bereitgestellten Zertifikat genehmigt, fordert der Browser die Erweiterung auf, die Daten zu signieren, um den TLS-Handshake fortzusetzen. Die Anfrage wird als onSignatureRequested-Ereignis gesendet.
- Dieses Ereignis enthält Eingabedaten, deklariert, welcher Algorithmus zum Generieren der Signatur verwendet werden muss, und verweist auf eines der Zertifikate, die von dieser Erweiterung gemeldet wurden. Die Erweiterung muss eine Signatur für die angegebenen Daten mit dem privaten Schlüssel erstellen, der dem referenzierten Zertifikat zugeordnet ist. Zum Erstellen der Signatur muss möglicherweise ein DigestInfo vorangestellt und das Ergebnis vor der eigentlichen Signierung aufgefüllt werden.
- Die Erweiterung sendet die Signatur mit der Methode reportSignature an den Browser zurück. Wenn die Signatur nicht berechnet werden konnte, muss die Methode ohne Signatur aufgerufen werden.
- Wenn die Signatur bereitgestellt wurde, schließt der Browser den TLS-Handshake ab.
Die tatsächliche Reihenfolge der Schritte kann abweichen. Der Nutzer wird beispielsweise nicht aufgefordert, ein Zertifikat auszuwählen, wenn die Unternehmensrichtlinie zur automatischen Auswahl eines Zertifikats verwendet wird (siehe AutoSelectCertificateForUrls und Chrome-Richtlinien für Nutzer).
In der Erweiterung kann das so aussehen:
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);
Typen
Algorithm
Typen der unterstützten kryptografischen Signaturalgorithmen.
Enum
"RSASSA_PKCS1_v1_5_MD5_SHA1" 
 Gibt den RSASSA PKCS#1 v1.5-Signaturalgorithmus mit dem MD5-SHA-1-Hashing an. Die Erweiterung darf kein DigestInfo-Präfix voranstellen, sondern nur PKCS#1-Padding hinzufügen. Dieser Algorithmus ist veraltet und wird ab Chrome-Version 109 nie mehr angefordert.
"RSASSA_PKCS1_v1_5_SHA1" 
 Gibt den RSASSA PKCS#1 v1.5-Signaturalgorithmus mit der SHA-1-Hash-Funktion an.
"RSASSA_PKCS1_v1_5_SHA256" 
 Gibt den RSASSA PKCS#1 v1.5-Signaturalgorithmus mit der SHA-256-Hash-Funktion an.
"RSASSA_PKCS1_v1_5_SHA384" 
 Gibt den RSASSA PKCS#1 v1.5-Signaturalgorithmus mit der SHA-384-Hash-Funktion an.
"RSASSA_PKCS1_v1_5_SHA512" 
 Gibt den RSASSA PKCS#1 v1.5-Signaturalgorithmus mit der SHA-512-Hash-Funktion an.
„RSASSA_PSS_SHA256“ 
 Gibt den RSASSA-PSS-Signaturalgorithmus mit der SHA-256-Hash-Funktion, der MGF1-Maskengenerierungsfunktion und dem Salt in der gleichen Größe wie der Hash an.
"RSASSA_PSS_SHA384" 
 Gibt den RSASSA-PSS-Signaturalgorithmus mit der SHA-384-Hash-Funktion, der MGF1-Maskengenerierungsfunktion und dem Salt in der gleichen Größe wie der Hash an.
„RSASSA_PSS_SHA512“ 
 Gibt den RSASSA-PSS-Signaturalgorithmus mit der SHA-512-Hash-Funktion, der MGF1-Maskengenerierungsfunktion und dem Salt in der gleichen Größe wie der Hash an.
CertificateInfo
Attribute
- 
    ZertifikatArrayBuffer Muss die DER-Codierung eines X.509-Zertifikats sein. Derzeit werden nur Zertifikate von RSA-Schlüsseln unterstützt. 
- 
    supportedHashesHash[] Muss auf alle für dieses Zertifikat unterstützten Hashes festgelegt werden. Für diese Erweiterung werden nur Signaturen von Digests angefordert, die mit einem dieser Hash-Algorithmen berechnet wurden. Die Reihenfolge sollte absteigend nach Hash-Präferenz sein. 
CertificatesUpdateRequest
Attribute
- 
    certificatesRequestIdZahl Anfragekennung, die an setCertificatesübergeben werden soll.
ClientCertificateInfo
Attribute
- 
    certificateChainArrayBuffer[] Das Array muss als erstes Element die DER-Codierung des X.509-Clientzertifikats enthalten. Sie muss genau ein Zertifikat enthalten. 
- 
    supportedAlgorithmsAlle für dieses Zertifikat unterstützten Algorithmen. Die Erweiterung wird nur für Signaturen mit einem dieser Algorithmen angefragt. 
Error
Arten von Fehlern, die von der Erweiterung gemeldet werden können.
Wert
"GENERAL_ERROR" 
 
Hash
Verworfen. Ersetzt durch Algorithm.
Enum
"MD5_SHA1" 
 Gibt die MD5- und SHA1-Hash-Algorithmen an.
„SHA1“ 
 Gibt den SHA1-Hash-Algorithmus an.
„SHA256“ 
 Gibt den SHA256-Hash-Algorithmus an.
"SHA384" 
 Gibt den SHA384-Hashalgorithmus an.
"SHA512" 
 Gibt den SHA512-Hashing-Algorithmus an.
PinRequestErrorType
Die Fehlertypen, die dem Nutzer über die Funktion „requestPin“ angezeigt werden können.
Enum
„INVALID_PIN“ 
 Gibt an, dass die PIN ungültig ist.
„INVALID_PUK“ 
 Gibt an, dass der PUK ungültig ist.
"MAX_ATTEMPTS_EXCEEDED" 
 Gibt an, dass die maximale Anzahl von Versuchen überschritten wurde.
„UNKNOWN_ERROR“ 
 Gibt an, dass der Fehler nicht durch die oben genannten Typen dargestellt werden kann.
PinRequestType
Der von der Erweiterung mit der Funktion „requestPin“ angeforderte Code.
Enum
"PIN" 
 Gibt an, dass der angeforderte Code eine PIN ist.
„PUK“ 
 Gibt an, dass der angeforderte Code ein PUK ist.
PinResponseDetails
Attribute
- 
    userInputString optional Der vom Nutzer angegebene Code. Leer, wenn der Nutzer das Dialogfeld geschlossen hat oder ein anderer Fehler aufgetreten ist. 
ReportSignatureDetails
Attribute
- 
    Fehler"GENERAL_ERROR" 
 optionalFehler, der beim Generieren der Signatur aufgetreten ist, falls vorhanden. 
- 
    signRequestIdZahl Die Anfrage-ID, die über das Ereignis onSignatureRequestedempfangen wurde.
- 
    SignaturArrayBuffer optional Die Signatur, sofern sie erfolgreich generiert wurde. 
RequestPinDetails
Attribute
- 
    attemptsLeftnumber optional Die Anzahl der verbleibenden Versuche. So kann jede Benutzeroberfläche diese Informationen dem Nutzer präsentieren. Chrome soll dies nicht erzwingen. Stattdessen sollte stopPinRequest von der Erweiterung mit errorType = MAX_ATTEMPTS_EXCEEDED aufgerufen werden, wenn die Anzahl der PIN-Anfragen überschritten wird. 
- 
    errorTypePinRequestErrorType optional Die Fehlervorlage, die dem Nutzer angezeigt wird. Dieser Wert sollte festgelegt werden, wenn die vorherige Anfrage fehlgeschlagen ist, um den Nutzer über den Grund für den Fehler zu informieren. 
- 
    requestTypePinRequestType optional Der angeforderte Codetyp. Der Standardwert ist „PIN“. 
- 
    signRequestIdZahl Die ID, die von Chrome in SignRequest angegeben wird. 
SetCertificatesDetails
Attribute
- 
    certificatesRequestIdnumber optional Wenn die Funktion als Reaktion auf onCertificatesUpdateRequestedaufgerufen wird, sollte sie den empfangenencertificatesRequestId-Wert enthalten. Andernfalls sollte sie nicht festgelegt werden.
- 
    clientCertificatesListe der derzeit verfügbaren Clientzertifikate. 
- 
    Fehler"GENERAL_ERROR" 
 optionalFehler, der beim Extrahieren der Zertifikate aufgetreten ist (falls vorhanden). Dieser Fehler wird dem Nutzer bei Bedarf angezeigt. 
SignatureRequest
Attribute
- 
    AlgorithmusDer zu verwendende Signaturalgorithmus. 
- 
    ZertifikatArrayBuffer Die DER-Codierung eines X.509-Zertifikats. Die Erweiterung muss inputmit dem zugehörigen privaten Schlüssel signieren.
- 
    EingabeArrayBuffer Zu signierende Daten. Die Daten sind nicht gehasht. 
- 
    signRequestIdZahl Anfragekennung, die an reportSignatureübergeben werden soll.
SignRequest
Attribute
- 
    ZertifikatArrayBuffer Die DER-Codierung eines X.509-Zertifikats. Die Erweiterung muss digestmit dem zugehörigen privaten Schlüssel signieren.
- 
    HashwertArrayBuffer Der zu signierende Digest. 
- 
    HashBezieht sich auf den Hash-Algorithmus, der zum Erstellen von digestverwendet wurde.
- 
    signRequestIdZahl Chrome 57 und höherDie eindeutige ID, die von der Erweiterung verwendet werden soll, wenn sie eine Methode aufrufen muss, für die sie erforderlich ist, z.B. „requestPin“. 
StopPinRequestDetails
Attribute
- 
    errorTypePinRequestErrorType optional Die Fehlervorlage. Falls vorhanden, wird sie dem Nutzer angezeigt. Sollte den Grund für das Beenden des Ablaufs enthalten, wenn dies durch einen Fehler verursacht wurde, z.B. MAX_ATTEMPTS_EXCEEDED. 
- 
    signRequestIdZahl Die ID, die von Chrome in SignRequest angegeben wird. 
Methoden
reportSignature()
chrome.certificateProvider.reportSignature(
details: ReportSignatureDetails,
callback?: function,
): Promise<void>
Sollte als Reaktion auf onSignatureRequested aufgerufen werden.
Die Erweiterung muss diese Funktion schließlich für jedes onSignatureRequested-Ereignis aufrufen. Die API-Implementierung wartet nach einiger Zeit nicht mehr auf diesen Aufruf und antwortet mit einem Zeitüberschreitungsfehler, wenn diese Funktion aufgerufen wird.
Parameter
- 
    Details
- 
    callbackFunktion optional Der Parameter callbacksieht so aus:() => void 
Ausgabe
- 
            Promise<void> Chrome 96 und höherPromises werden nur für Manifest V3 und höher unterstützt. Auf anderen Plattformen müssen Callbacks verwendet werden. 
requestPin()
chrome.certificateProvider.requestPin(
details: RequestPinDetails,
callback?: function,
): Promise<PinResponseDetails | undefined>
Fordert die PIN vom Nutzer an. Es ist jeweils nur eine laufende Anfrage zulässig. Anfragen, die während eines anderen Ablaufs gestellt werden, werden abgelehnt. Die Erweiterung muss es später noch einmal versuchen, wenn ein anderer Ablauf gerade ausgeführt wird.
Parameter
- 
    DetailsEnthält die Details zum angeforderten Dialogfeld. 
- 
    callbackFunktion optional Der Parameter callbacksieht so aus:(details?: PinResponseDetails) => void - 
    DetailsPinResponseDetails optional 
 
- 
    
Ausgabe
- 
            Promise<PinResponseDetails | undefined> Chrome 96 und höherPromises werden nur für Manifest V3 und höher unterstützt. Auf anderen Plattformen müssen Callbacks verwendet werden. 
setCertificates()
chrome.certificateProvider.setCertificates(
details: SetCertificatesDetails,
callback?: function,
): Promise<void>
Legt eine Liste von Zertifikaten fest, die im Browser verwendet werden sollen.
Die Erweiterung sollte diese Funktion nach der Initialisierung und bei jeder Änderung der Menge der derzeit verfügbaren Zertifikate aufrufen. Die Erweiterung sollte diese Funktion auch als Reaktion auf onCertificatesUpdateRequested aufrufen, wenn dieses Ereignis empfangen wird.
Parameter
- 
    DetailsDie festzulegenden Zertifikate. Ungültige Zertifikate werden ignoriert. 
- 
    callbackFunktion optional Der Parameter callbacksieht so aus:() => void 
Ausgabe
- 
            Promise<void> Chrome 96 und höherPromises werden nur für Manifest V3 und höher unterstützt. Auf anderen Plattformen müssen Callbacks verwendet werden. 
stopPinRequest()
chrome.certificateProvider.stopPinRequest(
details: StopPinRequestDetails,
callback?: function,
): Promise<void>
Beendet die von der Funktion requestPin gestartete PIN-Anfrage.
Parameter
- 
    DetailsEnthält Details zum Grund für das Beenden des Anfragenflusses. 
- 
    callbackFunktion optional Der Parameter callbacksieht so aus:() => void 
Ausgabe
- 
            Promise<void> Chrome 96 und höherPromises werden nur für Manifest V3 und höher unterstützt. Auf anderen Plattformen müssen Callbacks verwendet werden. 
Ereignisse
onCertificatesRequested
chrome.certificateProvider.onCertificatesRequested.addListener(
callback: function,
)
Verwenden Sie stattdessen onCertificatesUpdateRequested.
Dieses Ereignis wird jedes Mal ausgelöst, wenn der Browser die aktuelle Liste der von dieser Erweiterung bereitgestellten Zertifikate anfordert. Die Erweiterung muss reportCallback genau einmal mit der aktuellen Liste der Zertifikate aufrufen.
Parameter
- 
    callbackFunktion Der Parameter callbacksieht so aus:(reportCallback: function) => void - 
    reportCallbackFunktion Der Parameter reportCallbacksieht so aus:(certificates: CertificateInfo[], callback: function) => void - 
    Zertifikate
- 
    callbackFunktion Der Parameter callbacksieht so aus:(rejectedCertificates: ArrayBuffer[]) => void - 
    rejectedCertificatesArrayBuffer[] 
 
- 
    
 
- 
    
 
- 
    
onCertificatesUpdateRequested
chrome.certificateProvider.onCertificatesUpdateRequested.addListener(
callback: function,
)
Dieses Ereignis wird ausgelöst, wenn die über setCertificates festgelegten Zertifikate nicht ausreichen oder der Browser aktualisierte Informationen anfordert. Die Erweiterung muss setCertificates mit der aktualisierten Liste der Zertifikate und dem empfangenen certificatesRequestId aufrufen.
Parameter
- 
    callbackFunktion Der Parameter callbacksieht so aus:(request: CertificatesUpdateRequest) => void - 
    Anfrage
 
- 
    
onSignatureRequested
chrome.certificateProvider.onSignatureRequested.addListener(
callback: function,
)
Dieses Ereignis wird jedes Mal ausgelöst, wenn der Browser eine Nachricht mit einem Zertifikat signieren muss, das von dieser Erweiterung über setCertificates bereitgestellt wird.
Die Erweiterung muss die Eingabedaten aus request mit dem entsprechenden Algorithmus und privaten Schlüssel signieren und zurückgeben, indem sie reportSignature mit dem empfangenen signRequestId aufruft.
Parameter
- 
    callbackFunktion Der Parameter callbacksieht so aus:(request: SignatureRequest) => void - 
    Anfrage
 
- 
    
onSignDigestRequested
chrome.certificateProvider.onSignDigestRequested.addListener(
callback: function,
)
Verwenden Sie stattdessen onSignatureRequested.
Dieses Ereignis wird jedes Mal ausgelöst, wenn der Browser eine Nachricht mit einem von dieser Erweiterung bereitgestellten Zertifikat als Antwort auf ein onCertificatesRequested-Ereignis signieren muss. Die Erweiterung muss die Daten in request mit dem entsprechenden Algorithmus und privaten Schlüssel signieren und durch Aufrufen von reportCallback zurückgeben. reportCallback muss genau einmal aufgerufen werden.
Parameter
- 
    callbackFunktion Der Parameter callbacksieht so aus:(request: SignRequest, reportCallback: function) => void - 
    Anfrage
- 
    reportCallbackFunktion Chrome 47 und höherDer Parameter reportCallbacksieht so aus:(signature?: ArrayBuffer) => void - 
    SignaturArrayBuffer optional 
 
- 
    
 
-