Descrizione
Utilizza questa API per esporre i certificati alla piattaforma, che può utilizzarli per le autenticazioni TLS.
Autorizzazioni
certificateProviderDisponibilità
Utilizzo
L'utilizzo tipico di questa API per esporre i certificati client a ChromeOS segue questi passaggi:
- L'estensione si registra per gli eventi onCertificatesUpdateRequested e onSignatureRequested.
- L'estensione chiama setCertificates per fornire l'elenco iniziale dei certificati dopo l'inizializzazione.
- L'estensione monitora le modifiche nell'elenco dei certificati disponibili e chiama setCertificates per comunicare al browser ogni modifica.
- Durante un handshake TLS, il browser riceve una richiesta di certificato client. Con un evento onCertificatesUpdateRequested, il browser chiede all'estensione di segnalare tutti i certificati che fornisce attualmente.
- L'estensione restituisce i certificati attualmente disponibili utilizzando il metodo setCertificates.
- Il browser confronta tutti i certificati disponibili con la richiesta di certificato client dell'host remoto. Le corrispondenze vengono presentate all'utente in una finestra di dialogo di selezione.
- L'utente può selezionare un certificato e quindi approvare l'autenticazione o interromperla.

- Se l'utente interrompe l'autenticazione o se nessun certificato corrisponde alla richiesta, l'autenticazione client TLS viene interrotta.
- In caso contrario, se l'utente approva l'autenticazione con un certificato fornito da questa estensione, il browser richiede all'estensione di firmare i dati per continuare l'handshake TLS. La richiesta viene inviata come evento onSignatureRequested.
- Questo evento contiene i dati di input, dichiara quale algoritmo deve essere utilizzato per generare la firma e fa riferimento a uno dei certificati segnalati da questa estensione. L'estensione deve creare una firma per i dati forniti utilizzando la chiave privata associata al certificato a cui viene fatto riferimento. La creazione della firma potrebbe richiedere l'anteposizione di un DigestInfo e il riempimento del risultato prima della firma effettiva.
- L'estensione invia nuovamente la firma al browser utilizzando il metodo reportSignature. Se non è stato possibile calcolare la firma, il metodo deve essere chiamato senza firma.
- Se la firma è stata fornita, il browser completa l'handshake TLS.
La sequenza effettiva di passaggi può essere diversa. Ad esempio, all'utente non verrà chiesto di selezionare un certificato se viene utilizzato il criterio aziendale per selezionare automaticamente un certificato (vedi AutoSelectCertificateForUrls e Criteri di Chrome per gli utenti).
Nell'estensione, può essere simile al seguente snippet:
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);
Tipi
Algorithm
Tipi di algoritmi di firma crittografica supportati.
Enum
"RSASSA_PKCS1_v1_5_MD5_SHA1" 
 Specifica l'algoritmo di firma RSASSA PKCS#1 v1.5 con l'hashing MD5-SHA-1. L'estensione non deve anteporre un prefisso DigestInfo, ma solo aggiungere il padding PKCS#1. Questo algoritmo è obsoleto e non verrà mai richiesto da Chrome a partire dalla versione 109.
"RSASSA_PKCS1_v1_5_SHA1" 
 Specifica l'algoritmo di firma RSASSA PKCS#1 v1.5 con la funzione hash SHA-1.
"RSASSA_PKCS1_v1_5_SHA256" 
 Specifica l'algoritmo di firma RSASSA PKCS#1 v1.5 con la funzione hash SHA-256.
"RSASSA_PKCS1_v1_5_SHA384" 
 Specifica l'algoritmo di firma RSASSA PKCS#1 v1.5 con la funzione di hashing SHA-384.
"RSASSA_PKCS1_v1_5_SHA512" 
 Specifica l'algoritmo di firma RSASSA PKCS#1 v1.5 con la funzione di hashing SHA-512.
"RSASSA_PSS_SHA256" 
 Specifica l'algoritmo di firma RSASSA PSS con la funzione hash SHA-256, la funzione di generazione della maschera MGF1 e il sale delle stesse dimensioni dell'hash.
"RSASSA_PSS_SHA384" 
 Specifica l'algoritmo di firma RSASSA PSS con la funzione hash SHA-384, la funzione di generazione della maschera MGF1 e il sale della stessa dimensione dell'hash.
"RSASSA_PSS_SHA512" 
 Specifica l'algoritmo di firma RSASSA PSS con la funzione hash SHA-512, la funzione di generazione della maschera MGF1 e il salt della stessa dimensione dell'hash.
CertificateInfo
Proprietà
- 
    certificatoArrayBuffer Deve essere la codifica DER di un certificato X.509. Al momento sono supportati solo i certificati delle chiavi RSA. 
- 
    supportedHashesHash[] Deve essere impostato su tutti gli hash supportati per questo certificato. Questa estensione chiederà solo le firme dei digest calcolati con uno di questi algoritmi hash. Questi devono essere in ordine decrescente di preferenza dell'hash. 
CertificatesUpdateRequest
Proprietà
- 
    certificatesRequestIdnumero Identificatore della richiesta da trasmettere a setCertificates.
ClientCertificateInfo
Proprietà
- 
    certificateChainArrayBuffer[] L'array deve contenere la codifica DER del certificato client X.509 come primo elemento. Deve includere esattamente un certificato. 
- 
    supportedAlgorithmsTutti gli algoritmi supportati per questo certificato. All'estensione verranno richieste firme solo utilizzando uno di questi algoritmi. 
Error
Tipi di errori che l'estensione può segnalare.
Valore
"GENERAL_ERROR" 
 
Hash
Deprecato. Sostituito da Algorithm.
Enum
"MD5_SHA1" 
 Specifica gli algoritmi hash MD5 e SHA1.
"SHA1" 
 Specifica l'algoritmo hash SHA1.
"SHA256" 
 Specifica l'algoritmo di hashing SHA256.
"SHA384" 
 Specifica l'algoritmo di hashing SHA384.
"SHA512" 
 Specifica l'algoritmo di hashing SHA512.
PinRequestErrorType
I tipi di errori che possono essere presentati all'utente tramite la funzione requestPin.
Enum
"INVALID_PIN" 
 Specifica che il PIN non è valido.
"INVALID_PUK" 
 Specifica che il PUK non è valido.
"MAX_ATTEMPTS_EXCEEDED" 
 Specifica che è stato superato il numero massimo di tentativi.
"UNKNOWN_ERROR" 
 Specifica che l'errore non può essere rappresentato dai tipi precedenti.
PinRequestType
Il tipo di codice richiesto dall'estensione con la funzione requestPin.
Enum
"PIN" 
 Specifica che il codice richiesto è un PIN.
"PUK" 
 Specifica che il codice richiesto è un PUK.
PinResponseDetails
Proprietà
- 
    userInputstringa facoltativa Il codice fornito dall'utente. Vuoto se l'utente ha chiuso la finestra di dialogo o si è verificato un altro errore. 
ReportSignatureDetails
Proprietà
- 
    errore"GENERAL_ERROR" 
 facoltativoErrore verificatosi durante la generazione della firma, se presente. 
- 
    signRequestIdnumero Identificatore della richiesta ricevuto tramite l'evento onSignatureRequested.
- 
    firmaArrayBuffer facoltativo La firma, se generata correttamente. 
RequestPinDetails
Proprietà
- 
    attemptsLeftnumber (facoltativo) Il numero di tentativi rimanenti. Queste informazioni vengono fornite in modo che qualsiasi UI possa presentarle all'utente. Chrome non dovrebbe applicarlo. Al contrario, stopPinRequest deve essere chiamato dall'estensione con errorType = MAX_ATTEMPTS_EXCEEDED quando viene superato il numero di richieste di PIN. 
- 
    errorTypePinRequestErrorType facoltativo Il modello di errore visualizzato dall'utente. Questo valore deve essere impostato se la richiesta precedente non è andata a buon fine, per comunicare all'utente il motivo dell'errore. 
- 
    requestTypePinRequestType facoltativo Il tipo di codice richiesto. Il valore predefinito è PIN. 
- 
    signRequestIdnumero L'ID fornito da Chrome in SignRequest. 
SetCertificatesDetails
Proprietà
- 
    certificatesRequestIdnumber (facoltativo) Se chiamato in risposta a onCertificatesUpdateRequested, deve contenere il valorecertificatesRequestIdricevuto. In caso contrario, deve essere impostato su unset.
- 
    clientCertificatesElenco dei certificati client attualmente disponibili. 
- 
    errore"GENERAL_ERROR" 
 facoltativoErrore verificatosi durante l'estrazione dei certificati, se presente. Questo errore verrà mostrato all'utente quando opportuno. 
SignatureRequest
Proprietà
- 
    algoritmoAlgoritmo di firma da utilizzare. 
- 
    certificatoArrayBuffer Codifica DER di un certificato X.509. L'estensione deve firmare inpututilizzando la chiave privata associata.
- 
    inputArrayBuffer Dati da firmare. Tieni presente che i dati non sono sottoposti ad hashing. 
- 
    signRequestIdnumero Identificatore della richiesta da trasmettere a reportSignature.
SignRequest
Proprietà
- 
    certificatoArrayBuffer Codifica DER di un certificato X.509. L'estensione deve firmare digestutilizzando la chiave privata associata.
- 
    digestArrayBuffer Il digest che deve essere firmato. 
- 
    hashSi riferisce all'algoritmo hash utilizzato per creare digest.
- 
    signRequestIdnumero Chrome 57+L'ID univoco da utilizzare dall'estensione nel caso in cui debba chiamare un metodo che lo richiede, ad esempio requestPin. 
StopPinRequestDetails
Proprietà
- 
    errorTypePinRequestErrorType facoltativo Il modello di errore. Se presente, viene visualizzato per l'utente. Inteso a contenere il motivo dell'interruzione del flusso se è stato causato da un errore, ad esempio MAX_ATTEMPTS_EXCEEDED. 
- 
    signRequestIdnumero L'ID fornito da Chrome in SignRequest. 
Metodi
reportSignature()
chrome.certificateProvider.reportSignature(
details: ReportSignatureDetails,
callback?: function,
): Promise<void>
Deve essere chiamato in risposta a onSignatureRequested.
L'estensione deve alla fine chiamare questa funzione per ogni evento onSignatureRequested; l'implementazione dell'API smetterà di attendere questa chiamata dopo un po' di tempo e risponderà con un errore di timeout quando viene chiamata questa funzione.
Parametri
- 
    dettagli
- 
    callbackfunzione facoltativa Il parametro callbackha il seguente aspetto:() => void 
Resi
- 
            Promise<void> Chrome 96+Le promesse sono supportate solo per Manifest V3 e versioni successive, le altre piattaforme devono utilizzare i callback. 
requestPin()
chrome.certificateProvider.requestPin(
details: RequestPinDetails,
callback?: function,
): Promise<PinResponseDetails | undefined>
Richiede il PIN all'utente. È consentita una sola richiesta in corso alla volta. Le richieste emesse mentre è in corso un altro flusso vengono rifiutate. È responsabilità dell'estensione riprovare più tardi se è in corso un altro flusso.
Parametri
- 
    dettagliContiene i dettagli della finestra di dialogo richiesta. 
- 
    callbackfunzione facoltativa Il parametro callbackha il seguente aspetto:(details?: PinResponseDetails) => void - 
    dettagliPinResponseDetails (facoltativo) 
 
- 
    
Resi
- 
            Promise<PinResponseDetails | undefined> Chrome 96+Le promesse sono supportate solo per Manifest V3 e versioni successive, le altre piattaforme devono utilizzare i callback. 
setCertificates()
chrome.certificateProvider.setCertificates(
details: SetCertificatesDetails,
callback?: function,
): Promise<void>
Imposta un elenco di certificati da utilizzare nel browser.
L'estensione deve chiamare questa funzione dopo l'inizializzazione e a ogni modifica dell'insieme di certificati attualmente disponibili. L'estensione deve chiamare questa funzione anche in risposta a onCertificatesUpdateRequested ogni volta che viene ricevuto questo evento.
Parametri
- 
    dettagliI certificati da impostare. I certificati non validi verranno ignorati. 
- 
    callbackfunzione facoltativa Il parametro callbackha il seguente aspetto:() => void 
Resi
- 
            Promise<void> Chrome 96+Le promesse sono supportate solo per Manifest V3 e versioni successive, le altre piattaforme devono utilizzare i callback. 
stopPinRequest()
chrome.certificateProvider.stopPinRequest(
details: StopPinRequestDetails,
callback?: function,
): Promise<void>
Interrompe la richiesta di PIN avviata dalla funzione requestPin.
Parametri
- 
    dettagliContiene i dettagli sul motivo dell'interruzione del flusso della richiesta. 
- 
    callbackfunzione facoltativa Il parametro callbackha il seguente aspetto:() => void 
Resi
- 
            Promise<void> Chrome 96+Le promesse sono supportate solo per Manifest V3 e versioni successive, le altre piattaforme devono utilizzare i callback. 
Eventi
onCertificatesRequested
chrome.certificateProvider.onCertificatesRequested.addListener(
callback: function,
)
Utilizza onCertificatesUpdateRequested.
Questo evento viene attivato ogni volta che il browser richiede l'elenco corrente dei certificati forniti da questa estensione. L'estensione deve chiamare reportCallback esattamente una volta con l'elenco corrente dei certificati.
Parametri
- 
    callbackfunzione Il parametro callbackha il seguente aspetto:(reportCallback: function) => void - 
    reportCallbackfunzione Il parametro reportCallbackha il seguente aspetto:(certificates: CertificateInfo[], callback: function) => void - 
    certificati
- 
    callbackfunzione Il parametro callbackha il seguente aspetto:(rejectedCertificates: ArrayBuffer[]) => void - 
    rejectedCertificatesArrayBuffer[] 
 
- 
    
 
- 
    
 
- 
    
onCertificatesUpdateRequested
chrome.certificateProvider.onCertificatesUpdateRequested.addListener(
callback: function,
)
Questo evento viene attivato se i certificati impostati tramite setCertificates non sono sufficienti o se il browser richiede informazioni aggiornate. L'estensione deve chiamare setCertificates con l'elenco aggiornato dei certificati e il certificatesRequestId ricevuto.
Parametri
- 
    callbackfunzione Il parametro callbackha il seguente aspetto:(request: CertificatesUpdateRequest) => void - 
    richiesta
 
- 
    
onSignatureRequested
chrome.certificateProvider.onSignatureRequested.addListener(
callback: function,
)
Questo evento viene attivato ogni volta che il browser deve firmare un messaggio utilizzando un certificato fornito da questa estensione tramite setCertificates.
L'estensione deve firmare i dati di input da request utilizzando l'algoritmo e la chiave privata appropriati e restituirli chiamando reportSignature con signRequestId ricevuto.
Parametri
- 
    callbackfunzione Il parametro callbackha il seguente aspetto:(request: SignatureRequest) => void - 
    richiesta
 
- 
    
onSignDigestRequested
chrome.certificateProvider.onSignDigestRequested.addListener(
callback: function,
)
Utilizza onSignatureRequested.
Questo evento viene attivato ogni volta che il browser deve firmare un messaggio utilizzando un certificato fornito da questa estensione in risposta a un evento onCertificatesRequested. L'estensione deve firmare i dati in request utilizzando l'algoritmo e la chiave privata appropriati e restituirli chiamando reportCallback. reportCallback deve essere chiamato esattamente una volta.
Parametri
- 
    callbackfunzione Il parametro callbackha il seguente aspetto:(request: SignRequest, reportCallback: function) => void - 
    richiesta
- 
    reportCallbackfunzione Chrome 47+Il parametro reportCallbackha il seguente aspetto:(signature?: ArrayBuffer) => void - 
    firmaArrayBuffer facoltativo 
 
- 
    
 
-