Описание
Используйте этот API для предоставления сертификатов платформе, которая может использовать эти сертификаты для аутентификации TLS.
Разрешения
certificateProvider
Доступность
Концепции и использование
Типичное использование этого API для предоставления клиентских сертификатов ChromeOS выглядит следующим образом:
- Расширение регистрируется для событий
onCertificatesUpdateRequested
иonSignatureRequested
. - Расширение вызывает
setCertificates()
для предоставления начального списка сертификатов после инициализации. - Расширение отслеживает изменения в списке доступных сертификатов и вызывает
setCertificates()
чтобы уведомить браузер о каждом таком изменении. - Во время TLS-рукопожатия браузер получает запрос на клиентский сертификат. С помощью события
onCertificatesUpdateRequested
браузер запрашивает у расширения отчет обо всех сертификатах, которые оно предоставляет в данный момент. - Расширение возвращает информацию о доступных на данный момент сертификатах с помощью метода
setCertificates()
. - Браузер сопоставляет все доступные сертификаты с клиентским запросом сертификата от удалённого хоста. Совпадения отображаются в диалоговом окне выбора.
- Пользователь может выбрать сертификат и тем самым одобрить аутентификацию или отменить аутентификацию.

- Если пользователь прерывает аутентификацию или запрос не соответствует ни одному сертификату, аутентификация клиента TLS прерывается.
- В противном случае, если пользователь одобряет аутентификацию с использованием сертификата, предоставленного этим расширением, браузер запрашивает у расширения подпись данных для продолжения TLS-рукопожатия. Запрос отправляется как событие
onSignatureRequested
. - Это событие содержит входные данные, объявляет алгоритм, который должен использоваться для генерации подписи, и ссылается на один из сертификатов, предоставленных этим расширением. Расширение должно создать подпись для указанных данных, используя закрытый ключ, связанный с указанным сертификатом. Для создания подписи может потребоваться добавление DigestInfo и заполнение результата перед фактической подписью.
- Расширение возвращает подпись браузеру с помощью метода
reportSignature()
. Если подпись не удалось вычислить, метод необходимо вызвать без подписи. - Если подпись была предоставлена, браузер завершает рукопожатие TLS.
Фактическая последовательность шагов может отличаться. Например, пользователю не будет предложено выбрать сертификат, если используется корпоративная политика автоматического выбора сертификата (см. 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() {
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
Типы поддерживаемых алгоритмов криптографической подписи.
Перечисление
"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. Этот алгоритм устарел и больше не будет использоваться Chrome, начиная с версии 109.
Определяет алгоритм подписи 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
Сертификат X.509 должен быть закодирован в формате DER. В настоящее время поддерживаются только сертификаты ключей RSA.
- поддерживаемые хэши
Хэш []
Необходимо установить все хеши, поддерживаемые этим сертификатом. Это расширение будет запрашиваться только для подписей дайджестов, рассчитанных с помощью одного из этих алгоритмов хеширования. Они должны быть расположены в порядке убывания приоритета хеша.
CertificatesUpdateRequest
Характеристики
- CertificatesRequestId
число
Идентификатор запроса для передачи в
setCertificates
.
ClientCertificateInfo
Характеристики
- цепочка сертификатов
ArrayBuffer[]
Массив должен содержать DER-кодировку клиентского сертификата X.509 в качестве своего первого элемента.
Должен быть представлен только один сертификат.
- поддерживаемыеалгоритмы
Алгоритм []
Все алгоритмы поддерживаются этим сертификатом. Расширение будет запрашиваться только для подписей с использованием одного из этих алгоритмов.
Error
Типы ошибок, о которых может сообщать расширение.
Ценить
"GENERAL_ERROR"
Hash
Устарело. Заменено на Algorithm
.
Перечисление
"MD5_SHA1" "SHA1" "ША256" "SHA384" "SHA512"
Определяет алгоритмы хеширования MD5 и SHA1.
Задает алгоритм хеширования SHA1.
Определяет алгоритм хеширования SHA256.
Задает алгоритм хеширования SHA384.
Определяет алгоритм хеширования SHA512.
PinRequestErrorType
Типы ошибок, которые могут быть представлены пользователю через функцию requestPin.
Перечисление
"INVALID_PIN" "INVALID_PUK" "MAX_ATTEMPTS_EXCEEDED" "НЕИЗВЕСТНАЯ_ОШИБКА"
Указывает, что PIN-код недействителен.
Указывает, что PUK-код недействителен.
Указывает, что превышено максимальное количество попыток.
Указывает, что ошибка не может быть представлена вышеуказанными типами.
PinRequestType
Тип кода, запрашиваемого расширением с функцией requestPin.
Перечисление
"ПРИКОЛОТЬ" "ПУК"
Указывает, что запрашиваемый код является PIN-кодом.
Указывает, что запрошенный код — это PUK.
PinResponseDetails
Характеристики
- пользовательский ввод
строка необязательная
Код, предоставленный пользователем. Пустой, если пользователь закрыл диалоговое окно или произошла другая ошибка.
ReportSignatureDetails
Характеристики
- ошибка
"GENERAL_ERROR"
необязательныйОшибка, возникшая при формировании подписи, если таковая имеется.
- signRequestId
число
Идентификатор запроса, полученный через событие
onSignatureRequested
. - подпись
ArrayBuffer необязательный
Подпись, если она успешно сгенерирована.
RequestPinDetails
Характеристики
- попыткиЛевые
номер необязательно
Количество оставшихся попыток. Это необходимо для того, чтобы любой пользовательский интерфейс мог предоставить эту информацию пользователю. Chrome не обязан принудительно применять это правило. Вместо этого расширение должно вызывать stopPinRequest с errorType = MAX_ATTEMPTS_EXCEEDED при превышении количества запросов на PIN-код.
- errorType
PinRequestErrorType необязательно
Шаблон ошибки, отображаемый пользователю. Его следует установить, если предыдущий запрос не удался, чтобы уведомить пользователя о причине ошибки.
- requestType
PinRequestType необязательно
Тип запрашиваемого кода. По умолчанию — PIN-код.
- signRequestId
число
Идентификатор, предоставленный Chrome в SignRequest.
SetCertificatesDetails
Характеристики
- CertificatesRequestId
номер необязательно
При вызове в ответ на
onCertificatesUpdateRequested
должен содержать полученное значениеcertificatesRequestId
. В противном случае должен быть сброшен. - клиентские сертификаты
Список доступных на данный момент клиентских сертификатов.
- ошибка
"GENERAL_ERROR"
необязательныйОшибка, возникшая при извлечении сертификатов (если таковая имеется). Информация об этой ошибке будет предоставлена пользователю при необходимости.
SignatureRequest
Характеристики
- алгоритм
Алгоритм подписи, который будет использоваться.
- сертификат
ArrayBuffer
Кодировка DER сертификата X.509. Расширение должно подписывать
input
, используя соответствующий закрытый ключ. - вход
ArrayBuffer
Данные для подписи. Обратите внимание, что данные не хешируются.
- signRequestId
число
Идентификатор запроса для передачи в
reportSignature
.
SignRequest
Характеристики
- сертификат
ArrayBuffer
Кодировка DER сертификата X.509. Расширение должно подписать
digest
, используя соответствующий закрытый ключ. - дайджест
ArrayBuffer
Дайджест, который необходимо подписать.
- хэш
Относится к алгоритму хеширования, который использовался для создания
digest
. - signRequestId
число
Хром 57+Уникальный идентификатор, который будет использоваться расширением, если ему потребуется вызвать метод, требующий этого, например requestPin.
StopPinRequestDetails
Характеристики
- errorType
PinRequestErrorType необязательно
Шаблон ошибки. При наличии он отображается пользователю. Содержит причину остановки потока, если она была вызвана ошибкой, например, MAX_ATTEMPTS_EXCEEDED.
- signRequestId
число
Идентификатор, предоставленный Chrome в SignRequest.
Методы
reportSignature()
chrome.certificateProvider.reportSignature(
details: ReportSignatureDetails,
): Promise<void>
Должен вызываться как ответ на onSignatureRequested
.
Расширение должно в конечном итоге вызвать эту функцию для каждого события onSignatureRequested
; реализация API прекратит ожидать этот вызов через некоторое время и ответит ошибкой тайм-аута при вызове этой функции.
Параметры
- подробности
Возврат
Обещание<void>
Хром 96+
requestPin()
chrome.certificateProvider.requestPin(
details: RequestPinDetails,
): Promise<PinResponseDetails | undefined>
Запрашивает PIN-код у пользователя. Разрешён только один текущий запрос одновременно. Запросы, отправленные во время выполнения другого потока, отклоняются. Расширение обязано повторить попытку позже, если другой поток уже выполняется.
Параметры
- подробности
Содержит подробную информацию о запрошенном диалоге.
Возврат
Обещание< PinResponseDetails | не определено>
Хром 96+
setCertificates()
chrome.certificateProvider.setCertificates(
details: SetCertificatesDetails,
): Promise<void>
Устанавливает список сертификатов для использования в браузере.
Расширение должно вызывать эту функцию после инициализации и при каждом изменении набора доступных сертификатов. Расширение также должно вызывать эту функцию в ответ на onCertificatesUpdateRequested
каждый раз при получении этого события.
Параметры
- подробности
Сертификаты для установки. Недействительные сертификаты будут игнорироваться.
Возврат
Обещание<void>
Хром 96+
stopPinRequest()
chrome.certificateProvider.stopPinRequest(
details: StopPinRequestDetails,
): Promise<void>
Останавливает запрос на вывод PIN-кода, запущенный функцией requestPin
.
Параметры
- подробности
Содержит сведения о причине остановки потока запросов.
Возврат
Обещание<void>
Хром 96+
События
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
- запрос