Описание
Используйте API chrome.enterprise.platformKeys для генерации ключей и установки сертификатов для этих ключей. Сертификаты будут управляться платформой и могут использоваться для аутентификации TLS, доступа к сети или другими расширениями через chrome.platformKeys.
Разрешения
enterprise.platformKeysДоступность
Понятия и применение
Типичный способ использования этого API для регистрации клиентского сертификата включает следующие шаги:
Получите все доступные токены, используя
enterprise.platformKeys.getTokens().Найдите токен с
id, равным"user". Используйте этот токен в дальнейшем.Сгенерируйте пару ключей, используя метод
generateKey()Token (определенный в SubtleCrypto). Он вернет дескриптор ключа.Экспортируйте открытый ключ, используя метод
exportKey()Token (определенный в SubtleCrypto).Создайте подпись данных запроса на сертификацию, используя метод
sign()Token (определенный в SubtleCrypto).Заполните заявку на сертификацию и отправьте ее в орган по сертификации.
Если сертификат получен, импортируйте его с помощью [
enterprise.platformKeys.importCertificate()`[3]
Вот пример, демонстрирующий основное взаимодействие с API, за исключением создания и отправки запроса на сертификацию:
function getUserToken(callback) {
chrome.enterprise.platformKeys.getTokens(function(tokens) {
for (var i = 0; i < tokens.length; i++) {
if (tokens[i].id == "user") {
callback(tokens[i]);
return;
}
}
callback(undefined);
});
}
function generateAndSign(userToken) {
var data = new Uint8Array([0, 5, 1, 2, 3, 4, 5, 6]);
var algorithm = {
name: "RSASSA-PKCS1-v1_5",
// RsaHashedKeyGenParams
modulusLength: 2048,
publicExponent:
new Uint8Array([0x01, 0x00, 0x01]), // Equivalent to 65537
hash: {
name: "SHA-256",
}
};
var cachedKeyPair;
userToken.subtleCrypto.generateKey(algorithm, false, ["sign"])
.then(function(keyPair) {
cachedKeyPair = keyPair;
return userToken.subtleCrypto.exportKey("spki", keyPair.publicKey);
},
console.log.bind(console))
.then(function(publicKeySpki) {
// Build the Certification Request using the public key.
return userToken.subtleCrypto.sign(
{name : "RSASSA-PKCS1-v1_5"}, cachedKeyPair.privateKey, data);
},
console.log.bind(console))
.then(function(signature) {
// Complete the Certification Request with |signature|.
// Send out the request to the CA, calling back
// onClientCertificateReceived.
},
console.log.bind(console));
}
function onClientCertificateReceived(userToken, certificate) {
chrome.enterprise.platformKeys.importCertificate(userToken.id, certificate);
}
getUserToken(generateAndSign);
Типы
Algorithm
Тип генерируемого ключа.
Перечисление
"RSA" "ECDSA"
ChallengeKeyOptions
Характеристики
- испытание
ArrayBuffer
Запрос, выданный веб-API подтвержденного доступа.
- registerKey
RegisterKeyOptions (необязательно)
Если ключ присутствует, он регистрируется в токене указанной
scopeдействия. Затем ключ может быть связан с сертификатом и использоваться как любой другой ключ подписи. Последующие вызовы этой функции будут генерировать новый корпоративный ключ в указаннойscope. - объем
Какой корпоративный ключ следует оспорить?
RegisterKeyOptions
Характеристики
- алгоритм
Какой алгоритм должен использовать зарегистрированный ключ?
Scope
Использовать ли ключ корпоративного пользователя или ключ корпоративного компьютера.
Перечисление
"ПОЛЬЗОВАТЕЛЬ" "МАШИНА"
Token
Характеристики
- идентификатор
нить
Этот токен однозначно идентифицирует данный
Token.Статические идентификаторы — это
"user"и"system", обозначающие, соответственно, пользовательский и системный аппаратный токен платформы. Любые другие токены (с другими идентификаторами) могут быть возвращены функциейenterprise.platformKeys.getTokens. - softwareBackedSubtleCrypto
SubtleCrypto
Chrome 97+Реализует интерфейс SubtleCrypto из WebCrypto. Криптографические операции, включая генерацию ключей, осуществляются программно. Защита ключей, и, следовательно, реализация свойства неизвлекаемости, осуществляется программно, поэтому ключи защищены хуже, чем ключи, поддерживаемые аппаратным обеспечением.
Можно генерировать только неизвлекаемые ключи. Поддерживаются следующие типы ключей: RSASSA-PKCS1-V1_5 и RSA-OAEP (в Chrome версий 135 и выше) с
modulusLengthдо 2048. Каждый ключ RSASSA-PKCS1-V1_5 может использоваться для подписи данных не более одного раза, если только расширение не включено в список разрешенных в соответствии с политикой KeyPermissions , в этом случае ключ может использоваться неограниченно. Ключи RSA-OAEP поддерживаются начиная с версии Chrome 135 и могут использоваться расширениями, включенными в список разрешенных в соответствии с той же политикой, для расшифровки других ключей.Ключи, сгенерированные для конкретного
Tokenнельзя использовать с другими токенами, а также сwindow.crypto.subtle. Аналогично, объектыKey, созданные с помощьюwindow.crypto.subtleнельзя использовать с этим интерфейсом. - subtleCrypto
SubtleCrypto
Реализует интерфейс SubtleCrypto из WebCrypto. Криптографические операции, включая генерацию ключей, выполняются на аппаратном уровне.
Можно генерировать только неизвлекаемые ключи. Поддерживаются следующие типы ключей: RSASSA-PKCS1-V1_5 и RSA-OAEP (в Chrome версий 135 и выше) с
modulusLengthдо 2048, а также ECDSA сnamedCurveP-256. Каждый ключ RSASSA-PKCS1-V1_5 и ECDSA может использоваться для подписи данных не более одного раза, если только расширение не включено в список разрешенных в соответствии с политикой KeyPermissions , в этом случае ключ может использоваться неограниченно. Ключи RSA-OAEP поддерживаются начиная с Chrome версии 135 и могут использоваться расширениями, включенными в список разрешенных в соответствии с той же политикой, для расшифровки других ключей.Ключи, сгенерированные для конкретного
Tokenнельзя использовать с другими токенами, а также сwindow.crypto.subtle. Аналогично, объектыKey, созданные с помощьюwindow.crypto.subtleнельзя использовать с этим интерфейсом.
Методы
challengeKey()
chrome.enterprise.platformKeys.challengeKey(
options: ChallengeKeyOptions,
): Promise<ArrayBuffer>
Аналогично challengeMachineKey и challengeUserKey , но позволяет указывать алгоритм зарегистрированного ключа. Проверяет аппаратный ключ Enterprise Machine Key и отправляет ответ в рамках протокола удаленной аттестации. Полезно только в ChromeOS и в сочетании с веб-API Verified Access, который одновременно отправляет запросы и проверяет ответы.
Успешная проверка с помощью Verified Access Web API является убедительным сигналом того, что текущее устройство является легитимным устройством ChromeOS, управляется доменом, указанным во время проверки, текущий вошедший в систему пользователь также управляется доменом, указанным во время проверки, и текущее состояние устройства соответствует корпоративной политике в отношении устройств. Например, политика может указывать, что устройство не должно находиться в режиме разработчика. Любой идентификатор устройства, полученный в результате проверки, тесно связан с аппаратным обеспечением текущего устройства. Если указана область действия "user" , идентификатор также тесно связан с текущим вошедшим в систему пользователем.
Эта функция имеет строгие ограничения и завершится с ошибкой, если текущее устройство не управляется, текущий пользователь не управляется или если эта операция не была явно разрешена для вызывающей стороны политикой корпоративного устройства. Запрашиваемый ключ не находится в токене "system" или "user" и недоступен для какого-либо другого API.
Параметры
- параметры
Объект, содержащий поля, определенные в
ChallengeKeyOptions.
Возвраты
Promise<ArrayBuffer>
Chrome 131+Возвращает промис, который разрешается с ответом на запрос.
challengeMachineKey()
chrome.enterprise.platformKeys.challengeMachineKey(
challenge: ArrayBuffer,
registerKey?: boolean,
): Promise<ArrayBuffer>
Используйте challengeKey вместо этого.
Эта функция запрашивает аппаратный ключ Enterprise Machine Key и выдает ответ в рамках протокола удаленной аттестации. Она полезна только на ChromeOS и в сочетании с веб-API Verified Access, который одновременно отправляет запросы и проверяет ответы. Успешная проверка с помощью веб-API Verified Access является надежным подтверждением всех следующих условий: * Текущее устройство является легитимным устройством ChromeOS. * Текущее устройство управляется доменом, указанным во время проверки. * Текущий вошедший в систему пользователь управляется доменом, указанным во время проверки. * Текущее состояние устройства соответствует корпоративной политике устройств. Например, политика может указывать, что устройство не должно находиться в режиме разработчика. * Любой идентификатор устройства, полученный в результате проверки, тесно связан с аппаратным обеспечением текущего устройства. Эта функция имеет строгие ограничения и завершится неудачей, если текущее устройство не управляется, текущий пользователь не управляется или если эта операция не была явно разрешена для вызывающей стороны корпоративной политикой устройств. Ключ Enterprise Machine Key не хранится в "system" токене и недоступен для каких-либо других API.
Параметры
- испытание
ArrayBuffer
Запрос, выданный веб-API подтвержденного доступа.
- registerKey
логический необязательный
Chrome 59+Если задано, текущий ключ Enterprise Machine Key регистрируется в
"system"токене и отказывается от роли ключа Enterprise Machine Key. Затем ключ может быть связан с сертификатом и использоваться как любой другой ключ подписи. Этот ключ представляет собой 2048-битный RSA. Последующие вызовы этой функции будут генерировать новый ключ Enterprise Machine Key.
Возвраты
Promise<ArrayBuffer>
Chrome 131+Возвращает промис, который разрешается с ответом на запрос.
challengeUserKey()
chrome.enterprise.platformKeys.challengeUserKey(
challenge: ArrayBuffer,
registerKey: boolean,
): Promise<ArrayBuffer>
Используйте challengeKey вместо этого.
Проверка осуществляется с помощью аппаратного ключа корпоративного пользователя, а ответ выдается в рамках протокола удаленной аттестации. Полезна только на ChromeOS и в сочетании с веб-API Verified Access, который одновременно отправляет запросы и проверяет ответы. Успешная проверка с помощью веб-API Verified Access является надежным подтверждением всех следующих условий: * Текущее устройство является легитимным устройством ChromeOS. * Текущее устройство управляется доменом, указанным во время проверки. * Текущий вошедший в систему пользователь управляется доменом, указанным во время проверки. * Текущее состояние устройства соответствует политике корпоративного пользователя. Например, политика может указывать, что устройство не должно находиться в режиме разработчика. * Открытый ключ, полученный в результате проверки, тесно связан с аппаратным обеспечением текущего устройства и текущим вошедшим в систему пользователем. Эта функция имеет строгие ограничения и завершится неудачей, если текущее устройство не управляется, текущий пользователь не управляется или если эта операция не была явно разрешена для вызывающей стороны политикой корпоративного пользователя. Ключ корпоративного пользователя не хранится в токене "user" и недоступен для какого-либо другого API.
Параметры
- испытание
ArrayBuffer
Запрос, выданный веб-API подтвержденного доступа.
- registerKey
логический
Если задано, текущий ключ корпоративного пользователя регистрируется в токене
"user"и отказывается от роли ключа корпоративного пользователя. Затем ключ может быть связан с сертификатом и использоваться как любой другой ключ подписи. Этот ключ представляет собой 2048-битный RSA. Последующие вызовы этой функции будут генерировать новый ключ корпоративного пользователя.
Возвраты
Promise<ArrayBuffer>
Chrome 131+Возвращает промис, который разрешается с ответом на запрос.
getCertificates()
chrome.enterprise.platformKeys.getCertificates(
tokenId: string,
): Promise<ArrayBuffer[]>
Возвращает список всех клиентских сертификатов, доступных для заданного токена. Может использоваться для проверки наличия и срока действия клиентских сертификатов, пригодных для определенной аутентификации.
Параметры
- tokenId
нить
Идентификатор токена, возвращаемый функцией
getTokens.
Возвраты
Promise<ArrayBuffer[]>
Chrome 131+Возвращает промис, который разрешается со списком доступных сертификатов.
getTokens()
chrome.enterprise.platformKeys.getTokens(): Promise<Token[]>
Возвращает доступные токены. В обычной пользовательской сессии список всегда будет содержать токен пользователя с id "user" . Если доступен системный токен TPM, возвращаемый список также будет содержать системный токен с id "system" . Системный токен будет одинаковым для всех сессий на этом устройстве (устройстве, например, в смысле Chromebook).
Возвраты
Promise< Token []>
Chrome 131+Вызывается функцией
getTokensсо списком доступных токенов.
importCertificate()
chrome.enterprise.platformKeys.importCertificate(
tokenId: string,
certificate: ArrayBuffer,
): Promise<void>
Импортирует certificate в указанный токен, если сертифицированный ключ уже сохранен в этом токене. После успешного запроса на сертификацию эту функцию следует использовать для сохранения полученного сертификата и предоставления его операционной системе и браузеру для аутентификации.
Параметры
- tokenId
нить
Идентификатор токена, возвращаемый функцией
getTokens. - сертификат
ArrayBuffer
Кодировка DER сертификата X.509.
Возвраты
Обещание<пустота>
Chrome 131+Возвращает промис, который разрешается по завершении данной операции.
removeCertificate()
chrome.enterprise.platformKeys.removeCertificate(
tokenId: string,
certificate: ArrayBuffer,
): Promise<void>
Удаляет certificate из указанного токена, если он присутствует. Следует использовать для удаления устаревших сертификатов, чтобы они не учитывались при аутентификации и не загромождали выбор сертификата. Следует использовать для освобождения места в хранилище сертификатов.
Параметры
- tokenId
нить
Идентификатор токена, возвращаемый функцией
getTokens. - сертификат
ArrayBuffer
Кодировка DER сертификата X.509.
Возвраты
Обещание<пустота>
Chrome 131+Возвращает промис, который разрешается по завершении данной операции.