Description
Utilisez cette API pour divulguer les certificats sur la plate-forme qui peut les utiliser pour les authentifications TLS.
Autorisations
certificateProvider
Disponibilité
Concepts et utilisation
Pour exposer des certificats client à ChromeOS à l'aide de cette API, procédez comme suit:
- L'extension s'inscrit aux événements
onCertificatesUpdateRequested
etonSignatureRequested
. - L'extension appelle
setCertificates()
pour fournir la liste initiale des certificats après l'initialisation. - L'extension surveille les modifications apportées à la liste des certificats disponibles et appelle
setCertificates()
pour informer le navigateur de chaque modification. - Lors d'un handshake TLS, le navigateur reçoit une requête de certificat client. Avec un événement
onCertificatesUpdateRequested
, le navigateur demande à l'extension de signaler tous les certificats qu'elle fournit actuellement. - L'extension renvoie les certificats actuellement disponibles à l'aide de la méthode
setCertificates()
. - Le navigateur met en correspondance tous les certificats disponibles avec la demande de certificat client de l'hôte distant. Les correspondances sont présentées à l'utilisateur dans une boîte de dialogue de sélection.
- L'utilisateur peut sélectionner un certificat et approuver ou abandonner l'authentification.
- Si l'utilisateur interrompt l'authentification ou qu'aucun certificat ne correspond à la demande, l'authentification client TLS est interrompue.
- Sinon, si l'utilisateur approuve l'authentification avec un certificat fourni par cette extension, le navigateur demande à l'extension de signer les données pour poursuivre le handshake TLS. La requête est envoyée en tant qu'événement
onSignatureRequested
. - Cet événement contient des données d'entrée, déclare l'algorithme à utiliser pour générer la signature et fait référence à l'un des certificats signalés par cette extension. L'extension doit créer une signature pour les données données à l'aide de la clé privée associée au certificat référencé. La création de la signature peut nécessiter d'ajouter un DigestInfo en préfixe et de rembourrer le résultat avant la signature proprement dite.
- L'extension renvoie la signature au navigateur à l'aide de la méthode
reportSignature()
. Si la signature n'a pas pu être calculée, la méthode doit être appelée sans signature. - Si la signature a été fournie, le navigateur termine le handshake TLS.
La séquence réelle des étapes peut être différente. Par exemple, l'utilisateur ne sera pas invité à sélectionner un certificat si la règle d'entreprise permettant de sélectionner automatiquement un certificat est utilisée (voir AutoSelectCertificateForUrls
et Règles Chrome pour les utilisateurs).
Dans l'extension, cela peut ressembler à l'extrait de code suivant:
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);
Types
Algorithm
Types d'algorithmes de signature cryptographique compatibles.
Énumération
"RSASSA_PKCS1_v1_5_MD5_SHA1"
Spécifie l'algorithme de signature RSASSA PKCS#1 v1.5 avec le hachage MD5-SHA-1. L'extension ne doit pas ajouter de préfixe DigestInfo, mais uniquement un remplissage PKCS#1. Cet algorithme est obsolète et ne sera plus jamais demandé par Chrome à partir de la version 109.
"RSASSA_PKCS1_v1_5_SHA1"
Spécifie l'algorithme de signature RSASSA PKCS#1 v1.5 avec la fonction de hachage SHA-1.
"RSASSA_PKCS1_v1_5_SHA256"
Spécifie l'algorithme de signature RSASSA PKCS#1 v1.5 avec la fonction de hachage SHA-256.
"RSASSA_PKCS1_v1_5_SHA384"
Spécifie l'algorithme de signature RSASSA PKCS#1 v1.5 avec la fonction de hachage SHA-384.
"RSASSA_PKCS1_v1_5_SHA512"
Spécifie l'algorithme de signature RSASSA PKCS#1 v1.5 avec la fonction de hachage SHA-512.
"RSASSA_PSS_SHA256"
Spécifie l'algorithme de signature RSASSA PSS avec la fonction de hachage SHA-256, la fonction de génération de masque MGF1 et le sel de la même taille que le hachage.
"RSASSA_PSS_SHA384"
Spécifie l'algorithme de signature RSASSA PSS avec la fonction de hachage SHA-384, la fonction de génération de masque MGF1 et le sel de la même taille que le hachage.
"RSASSA_PSS_SHA512"
Spécifie l'algorithme de signature RSASSA PSS avec la fonction de hachage SHA-512, la fonction de génération de masque MGF1 et le sel de la même taille que le hachage.
CertificateInfo
Propriétés
-
certificat
ArrayBuffer
Doit correspondre à l'encodage DER d'un certificat X.509. Actuellement, seuls les certificats de clés RSA sont acceptés.
-
supportedHashes
Hachage[]
Doit être défini sur tous les hachages compatibles avec ce certificat. Cette extension ne sera invitée à fournir que les signatures des récapitulatifs calculés avec l'un de ces algorithmes de hachage. Elles doivent être triées par ordre de préférence de hachage décroissant.
CertificatesUpdateRequest
Propriétés
-
certificatesRequestId
Nombre
Identifiant de la requête à transmettre à
setCertificates
.
ClientCertificateInfo
Propriétés
-
certificateChain
ArrayBuffer[]
Le tableau doit contenir l'encodage DER du certificat client X.509 comme premier élément.
Il doit s'agir exactement d'un seul certificat.
-
supportedAlgorithms
Tous les algorithmes compatibles avec ce certificat. L'extension ne sera invitée à signer que l'un de ces algorithmes.
Error
Types d'erreurs que l'extension peut signaler
Valeur
"GENERAL_ERROR"
Hash
Obsolète. Remplacé par Algorithm
.
Énumération
"MD5_SHA1"
Spécifie les algorithmes de hachage MD5 et SHA1.
"SHA1"
Spécifie l'algorithme de hachage SHA1.
"SHA256"
Spécifie l'algorithme de hachage SHA256.
"SHA384"
Spécifie l'algorithme de hachage SHA384.
"SHA512"
Spécifie l'algorithme de hachage SHA512.
PinRequestErrorType
Types d'erreurs pouvant être présentés à l'utilisateur via la fonction requestPin.
Énumération
"INVALID_PIN"
Indique que le code n'est pas valide.
"INVALID_PUK"
Indique que la clé PUK n'est pas valide.
"MAX_ATTEMPTS_EXCEEDED"
Spécifie que le nombre maximal de tentatives a été dépassé.
"UNKNOWN_ERROR"
Spécifie que l'erreur ne peut pas être représentée par les types ci-dessus.
PinRequestType
Type de code demandé par l'extension avec la fonction requestPin.
Énumération
"PIN"
Spécifie que le code demandé est un code PIN.
"PUK"
Spécifie que le code demandé est un code PUK.
PinResponseDetails
Propriétés
-
userInput
chaîne facultatif
Code fourni par l'utilisateur. Vide si l'utilisateur a fermé la boîte de dialogue ou si une autre erreur s'est produite.
ReportSignatureDetails
Propriétés
-
erreur
"GENERAL_ERROR"
facultatifErreur survenue lors de la génération de la signature, le cas échéant.
-
signRequestId
Nombre
Identifiant de requête reçu via l'événement
onSignatureRequested
. -
signature
ArrayBuffer facultatif
La signature, si elle a bien été générée.
RequestPinDetails
Propriétés
-
attemptsLeft
number facultatif
Nombre de tentatives restantes. Cette information est fournie afin que n'importe quelle UI puisse la présenter à l'utilisateur. Chrome ne doit pas appliquer cette règle. Au lieu de cela, l'extension doit appeler stopPinRequest avec errorType = MAX_ATTEMPTS_EXCEEDED lorsque le nombre de requêtes d'épingle est dépassé.
-
errorType
PinRequestErrorType facultatif
Modèle d'erreur affiché à l'utilisateur. Ce paramètre doit être défini si la requête précédente a échoué afin d'informer l'utilisateur de la raison de l'échec.
-
requestType
PinRequestType facultatif
Type de code demandé. La valeur par défaut est le code.
-
signRequestId
Nombre
ID attribué par Chrome dans SignRequest.
SetCertificatesDetails
Propriétés
-
certificatesRequestId
number facultatif
Lorsqu'il est appelé en réponse à
onCertificatesUpdateRequested
, doit contenir la valeurcertificatesRequestId
reçue. Sinon, ne doit pas être défini. -
clientCertificates
Liste des certificats client actuellement disponibles.
-
erreur
"GENERAL_ERROR"
facultatifErreur survenue lors de l'extraction des certificats, le cas échéant. Cette erreur s'affichera à l'utilisateur si nécessaire.
SignatureRequest
Propriétés
-
algorithm
Algorithme de signature à utiliser.
-
certificat
ArrayBuffer
Encodage DER d'un certificat X.509. L'extension doit signer
input
à l'aide de la clé privée associée. -
entrée
ArrayBuffer
Données à signer. Notez que les données ne sont pas hachées.
-
signRequestId
Nombre
Identifiant de la requête à transmettre à
reportSignature
.
SignRequest
Propriétés
-
certificat
ArrayBuffer
Encodage DER d'un certificat X.509. L'extension doit signer
digest
à l'aide de la clé privée associée. -
condensé
ArrayBuffer
Le condensé qui doit être signé.
-
hash
Fait référence à l'algorithme de hachage utilisé pour créer
digest
. -
signRequestId
Nombre
Chrome 57 et versions ultérieuresID unique à utiliser par l'extension si elle doit appeler une méthode qui l'exige, par exemple requestPin.
StopPinRequestDetails
Propriétés
-
errorType
PinRequestErrorType facultatif
Modèle d'erreur. S'il est présent, il s'affiche auprès de l'utilisateur. Destiné à contenir la raison de l'arrêt du flux s'il a été causé par une erreur, par exemple MAX_ATTEMPTS_EXCEEDED.
-
signRequestId
Nombre
ID attribué par Chrome dans SignRequest.
Méthodes
reportSignature()
chrome.certificateProvider.reportSignature(
details: ReportSignatureDetails,
callback?: function,
)
Doit être appelé en réponse à onSignatureRequested
.
L'extension doit appeler cette fonction pour chaque événement onSignatureRequested
. L'implémentation de l'API cessera d'attendre cet appel au bout d'un certain temps et répondra par une erreur de délai avant expiration lorsque cette fonction sera appelée.
Paramètres
-
détails
-
rappel
fonction facultatif
Le paramètre
callback
se présente comme suit :() => void
Renvoie
-
Promise<void>
Chrome 96 ou version ultérieureLes promesses sont compatibles avec la version 3 du fichier manifeste et les versions ultérieures, mais des rappels sont fournis pour assurer la rétrocompatibilité. Vous ne pouvez pas utiliser les deux dans le même appel de fonction. La promesse se résout avec le même type que celui transmis au rappel.
requestPin()
chrome.certificateProvider.requestPin(
details: RequestPinDetails,
callback?: function,
)
Demande le code à l'utilisateur. Une seule requête en cours à la fois est autorisée. Les requêtes émises pendant qu'un autre flux est en cours sont refusées. Il est de la responsabilité de l'extension de réessayer plus tard si un autre flux est en cours.
Paramètres
-
détails
Contient les détails de la boîte de dialogue demandée.
-
rappel
fonction facultatif
Le paramètre
callback
se présente comme suit :(details?: PinResponseDetails) => void
-
détails
PinResponseDetails facultatif
-
Renvoie
-
Promise<PinResponseDetails | undefined>
Chrome 96 ou version ultérieureLes promesses sont compatibles avec la version 3 du fichier manifeste et les versions ultérieures, mais des rappels sont fournis pour assurer la rétrocompatibilité. Vous ne pouvez pas utiliser les deux dans le même appel de fonction. La promesse se résout avec le même type que celui transmis au rappel.
setCertificates()
chrome.certificateProvider.setCertificates(
details: SetCertificatesDetails,
callback?: function,
)
Définit une liste de certificats à utiliser dans le navigateur.
L'extension doit appeler cette fonction après l'initialisation et à chaque modification de l'ensemble des certificats actuellement disponibles. L'extension doit également appeler cette fonction en réponse à onCertificatesUpdateRequested
chaque fois que cet événement est reçu.
Paramètres
-
détails
Certificats à définir. Les certificats non valides sont ignorés.
-
rappel
fonction facultatif
Le paramètre
callback
se présente comme suit :() => void
Renvoie
-
Promise<void>
Chrome 96 ou version ultérieureLes promesses sont compatibles avec la version 3 du fichier manifeste et les versions ultérieures, mais des rappels sont fournis pour assurer la rétrocompatibilité. Vous ne pouvez pas utiliser les deux dans le même appel de fonction. La promesse se résout avec le même type que celui transmis au rappel.
stopPinRequest()
chrome.certificateProvider.stopPinRequest(
details: StopPinRequestDetails,
callback?: function,
)
Arrête la requête d'épingle lancée par la fonction requestPin
.
Paramètres
-
détails
Indique le motif de l'arrêt du flux de requêtes.
-
rappel
fonction facultatif
Le paramètre
callback
se présente comme suit :() => void
Renvoie
-
Promise<void>
Chrome 96 ou version ultérieureLes promesses sont compatibles avec la version 3 du fichier manifeste et les versions ultérieures, mais des rappels sont fournis pour assurer la rétrocompatibilité. Vous ne pouvez pas utiliser les deux dans le même appel de fonction. La promesse se résout avec le même type que celui transmis au rappel.
Événements
onCertificatesRequested
chrome.certificateProvider.onCertificatesRequested.addListener(
callback: function,
)
Utilisez plutôt onCertificatesUpdateRequested
.
Cet événement se déclenche chaque fois que le navigateur demande la liste actuelle des certificats fournis par cette extension. L'extension doit appeler reportCallback
exactement une fois avec la liste actuelle des certificats.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :(reportCallback: function) => void
-
reportCallback
fonction
Le paramètre
reportCallback
se présente comme suit :(certificates: CertificateInfo[], callback: function) => void
-
certificats
-
rappel
fonction
Le paramètre
callback
se présente comme suit :(rejectedCertificates: ArrayBuffer[]) => void
-
rejectedCertificates
ArrayBuffer[]
-
-
-
onCertificatesUpdateRequested
chrome.certificateProvider.onCertificatesUpdateRequested.addListener(
callback: function,
)
Cet événement se déclenche si les certificats définis via setCertificates
sont insuffisants ou si le navigateur demande des informations à jour. L'extension doit appeler setCertificates
avec la liste mise à jour des certificats et l'certificatesRequestId
reçu.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :(request: CertificatesUpdateRequest) => void
-
request
-
onSignatureRequested
chrome.certificateProvider.onSignatureRequested.addListener(
callback: function,
)
Cet événement se déclenche chaque fois que le navigateur doit signer un message à l'aide d'un certificat fourni par cette extension via setCertificates
.
L'extension doit signer les données d'entrée de request
à l'aide de l'algorithme et de la clé privée appropriés, puis les renvoyer en appelant reportSignature
avec le signRequestId
reçu.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :(request: SignatureRequest) => void
-
request
-
onSignDigestRequested
chrome.certificateProvider.onSignDigestRequested.addListener(
callback: function,
)
Utilisez plutôt onSignatureRequested
.
Cet événement se déclenche chaque fois que le navigateur doit signer un message à l'aide d'un certificat fourni par cette extension en réponse à un événement onCertificatesRequested
. L'extension doit signer les données dans request
à l'aide de l'algorithme et de la clé privée appropriés, puis les renvoyer en appelant reportCallback
. reportCallback
doit être appelé exactement une fois.
Paramètres
-
rappel
fonction
Le paramètre
callback
se présente comme suit :(request: SignRequest, reportCallback: function) => void
-
request
-
reportCallback
fonction
Chrome 47 et versions ultérieuresLe paramètre
reportCallback
se présente comme suit :(signature?: ArrayBuffer) => void
-
signature
ArrayBuffer facultatif
-
-