Descripción
Usa la API de chrome.enterprise.platformKeys
para generar claves y, luego, instalar certificados para esas claves. La plataforma administrará los certificados, que se podrán usar para la autenticación de TLS, el acceso a la red o por otra extensión a través de chrome.platformKeys.
Permisos
enterprise.platformKeys
Disponibilidad
Conceptos y uso
El uso típico de esta API para inscribir un certificado de cliente sigue estos pasos:
Obtén todos los tokens disponibles con
enterprise.platformKeys.getTokens()
.Busca el token con
id
igual a"user"
. Usa este token posteriormente.Genera un par de claves con el método
generateKey()
Token (definido en SubtleCrypto). Esto devolverá el identificador de la clave.Exporta la clave pública con el método
exportKey()
Token (definido en SubtleCrypto).Crea la firma de los datos de la solicitud de certificación con el método
sign()
Token (definido en SubtleCrypto).Completa la solicitud de certificación y envíala a la autoridad certificadora.
Si se recibe un certificado, impórtalo con [
enterprise.platformKeys.importCertificate()
`[3]
A continuación, se muestra un ejemplo de la interacción principal de la API, excepto la compilación y el envío de la solicitud de certificación:
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);
Tipos
Algorithm
Es el tipo de clave que se generará.
Enum
"RSA"
"ECDSA"
ChallengeKeyOptions
Propiedades
-
desafío
ArrayBuffer
Es un desafío que emite la API de Verified Access Web.
-
registerKey
RegisterKeyOptions opcional
Si está presente, registra la clave impugnada con el token del
scope
especificado. Luego, la clave se puede asociar con un certificado y usarse como cualquier otra clave de firma. Las llamadas posteriores a esta función generarán una nueva clave empresarial en elscope
especificado. -
alcance
Es la clave de Enterprise que se verificará.
RegisterKeyOptions
Propiedades
-
algoritmo
Algoritmo que debe usar la clave registrada.
Scope
Indica si se debe usar la clave de usuario empresarial o la clave de máquina empresarial.
Enum
"USER"
"MACHINE"
Token
Propiedades
-
id
string
Identifica este
Token
de forma única.Los IDs estáticos son
"user"
y"system"
, que hacen referencia al token de hardware específico del usuario de la plataforma y al token de hardware de todo el sistema, respectivamente.enterprise.platformKeys.getTokens
puede devolver otros tokens (con otros identificadores). -
softwareBackedSubtleCrypto
SubtleCrypto
Chrome 97 y versiones posterioresImplementa la interfaz SubtleCrypto de WebCrypto. Las operaciones criptográficas, incluida la generación de claves, se respaldan con software. La protección de las claves y, por lo tanto, la implementación de la propiedad no extraíble se realizan en software, por lo que las claves están menos protegidas que las claves con copia de seguridad en hardware.
Solo se pueden generar claves no extraíbles. Los tipos de claves admitidos son RSASSA-PKCS1-V1_5 y RSA-OAEP (en versiones de Chrome 135 y posteriores) con
modulusLength
hasta 2048. Cada clave RSASSA-PKCS1-V1_5 se puede usar para firmar datos como máximo una vez, a menos que la extensión se incluya en la lista de entidades permitidas a través de la política KeyPermissions, en cuyo caso la clave se puede usar de forma indefinida. Las claves RSA-OAEP son compatibles desde la versión 135 de Chrome y las extensiones incluidas en la lista de entidades permitidas a través de esa misma política pueden usarlas para desencriptar otras claves.Las claves generadas en un
Token
específico no se pueden usar con ningún otro token ni conwindow.crypto.subtle
. Del mismo modo, los objetosKey
creados conwindow.crypto.subtle
no se pueden usar con esta interfaz. -
subtleCrypto
SubtleCrypto
Implementa la interfaz SubtleCrypto de WebCrypto. Las operaciones criptográficas, incluida la generación de claves, están respaldadas por hardware.
Solo se pueden generar claves no extraíbles. Los tipos de claves admitidos son RSASSA-PKCS1-V1_5 y RSA-OAEP (en versiones de Chrome 135 y posteriores) con
modulusLength
de hasta 2,048 y ECDSA connamedCurve
P-256. Cada clave RSASSA-PKCS1-V1_5 y ECDSA se puede usar para firmar datos como máximo una vez, a menos que la extensión se incluya en la lista de entidades permitidas a través de la política KeyPermissions, en cuyo caso la clave se puede usar de forma indefinida. Las claves RSA-OAEP son compatibles desde la versión 135 de Chrome y las extensiones incluidas en la lista de entidades permitidas a través de esa misma política pueden usarlas para desencriptar otras claves.Las claves generadas en un
Token
específico no se pueden usar con ningún otro token ni conwindow.crypto.subtle
. Del mismo modo, los objetosKey
creados conwindow.crypto.subtle
no se pueden usar con esta interfaz.
Métodos
challengeKey()
chrome.enterprise.platformKeys.challengeKey(
options: ChallengeKeyOptions,
): Promise<ArrayBuffer>
Es similar a challengeMachineKey
y challengeUserKey
, pero permite especificar el algoritmo de una clave registrada. Desafía una clave de máquina empresarial respaldada por hardware y emite la respuesta como parte de un protocolo de certificación remota. Solo es útil en ChromeOS y en conjunto con la API web de Verified Access, que emite desafíos y verifica respuestas.
Una verificación exitosa de la API web de Verified Access es un indicador sólido de que el dispositivo actual es un dispositivo ChromeOS legítimo, de que el dominio especificado durante la verificación administra el dispositivo actual, de que el dominio especificado durante la verificación administra el usuario actual que accedió y de que el estado actual del dispositivo cumple con la política empresarial del dispositivo. Por ejemplo, una política puede especificar que el dispositivo no debe estar en modo de desarrollador. Cualquier identidad del dispositivo que emita la verificación está estrechamente vinculada al hardware del dispositivo actual. Si se especifica el alcance de "user"
, la identidad también se vincula estrechamente al usuario que accedió actualmente.
Esta función está muy restringida y fallará si el dispositivo actual no está administrado, si el usuario actual no está administrado o si la política de dispositivos empresariales no habilitó explícitamente esta operación para el llamador. La clave impugnada no se encuentra en el token de "system"
o "user"
, y ninguna otra API puede acceder a ella.
Parámetros
-
opciones
Objeto que contiene los campos definidos en
ChallengeKeyOptions
.
Muestra
-
Promesa<ArrayBuffer>
Chrome 131 y versiones posteriores
challengeMachineKey()
chrome.enterprise.platformKeys.challengeMachineKey(
challenge: ArrayBuffer,
registerKey?: boolean,
): Promise<ArrayBuffer>
En su lugar, usa challengeKey
.
Desafía una clave de máquina empresarial respaldada por hardware y emite la respuesta como parte de un protocolo de certificación remota. Solo es útil en ChromeOS y en conjunto con la API web de Verified Access, que emite desafíos y verifica respuestas. Una verificación exitosa de la API web de Verified Access es un indicador sólido de todo lo siguiente: * El dispositivo actual es un dispositivo ChromeOS legítimo. * El dispositivo actual está administrado por el dominio especificado durante la verificación. * El usuario que actualmente ingresó está administrado por el dominio especificado durante la verificación. * El estado actual del dispositivo cumple con la política de dispositivos empresariales. Por ejemplo, una política puede especificar que el dispositivo no debe estar en modo de desarrollador. * Cualquier identidad del dispositivo que emita la verificación está estrechamente vinculada al hardware del dispositivo actual. Esta función está muy restringida y fallará si el dispositivo actual no está administrado, si el usuario actual no está administrado o si la política de dispositivos empresariales no habilitó explícitamente esta operación para el llamador. La clave de máquina empresarial no reside en el token de "system"
y ninguna otra API puede acceder a ella.
Parámetros
-
desafío
ArrayBuffer
Es un desafío que emite la API de Verified Access Web.
-
registerKey
booleano opcional
Chrome 59 y versiones posterioresSi se configura, la clave de máquina empresarial actual se registra con el token
"system"
y renuncia al rol de clave de máquina empresarial. Luego, la clave se puede asociar con un certificado y usarse como cualquier otra clave de firma. Esta clave es RSA de 2,048 bits. Las llamadas posteriores a esta función generarán una nueva clave de máquina empresarial.
Muestra
-
Promesa<ArrayBuffer>
Chrome 131 y versiones posteriores
challengeUserKey()
chrome.enterprise.platformKeys.challengeUserKey(
challenge: ArrayBuffer,
registerKey: boolean,
): Promise<ArrayBuffer>
En su lugar, usa challengeKey
.
Desafía una clave de usuario empresarial respaldada por hardware y emite la respuesta como parte de un protocolo de certificación remota. Solo es útil en ChromeOS y en conjunto con la API web de Verified Access, que emite desafíos y verifica respuestas. Una verificación exitosa de la API web de Verified Access es un indicador sólido de todo lo siguiente: * El dispositivo actual es un dispositivo ChromeOS legítimo. * El dispositivo actual está administrado por el dominio especificado durante la verificación. * El usuario que actualmente ingresó está administrado por el dominio especificado durante la verificación. * El estado actual del dispositivo cumple con la política para usuarios empresariales. Por ejemplo, una política puede especificar que el dispositivo no debe estar en modo de desarrollador. * La clave pública que emite la verificación está estrechamente vinculada al hardware del dispositivo actual y al usuario que accedió actualmente. Esta función está muy restringida y fallará si el dispositivo actual no está administrado, si el usuario actual no está administrado o si la política de usuario empresarial no habilitó explícitamente esta operación para el llamador. La clave de usuario de Enterprise no se encuentra en el token de "user"
y ninguna otra API puede acceder a ella.
Parámetros
-
desafío
ArrayBuffer
Es un desafío que emite la API de Verified Access Web.
-
registerKey
booleano
Si se configura, la clave de usuario empresarial actual se registra con el token de
"user"
y renuncia al rol de clave de usuario empresarial. Luego, la clave se puede asociar con un certificado y usarse como cualquier otra clave de firma. Esta clave es RSA de 2,048 bits. Las llamadas posteriores a esta función generarán una nueva clave de usuario empresarial.
Muestra
-
Promesa<ArrayBuffer>
Chrome 131 y versiones posteriores
getCertificates()
chrome.enterprise.platformKeys.getCertificates(
tokenId: string,
): Promise<ArrayBuffer[]>
Devuelve la lista de todos los certificados de cliente disponibles a partir del token determinado. Se puede usar para verificar la existencia y el vencimiento de los certificados de cliente que se pueden usar para una autenticación determinada.
Parámetros
-
tokenId
string
Es el ID de un token que devuelve
getTokens
.
Muestra
-
Promesa<ArrayBuffer[]>
Chrome 131 y versiones posteriores
getTokens()
chrome.enterprise.platformKeys.getTokens(): Promise<Token[]>
Devuelve los tokens disponibles. En la sesión de un usuario normal, la lista siempre contendrá el token del usuario con id
"user"
. Si hay disponible un token de TPM para todo el sistema, la lista que se muestra también contendrá el token para todo el sistema con id
"system"
. El token para todo el sistema será el mismo para todas las sesiones en este dispositivo (por ejemplo, una Chromebook).
Muestra
-
Promise<Token[]>
Chrome 131 y versiones posteriores
importCertificate()
chrome.enterprise.platformKeys.importCertificate(
tokenId: string,
certificate: ArrayBuffer,
): Promise<void>
Importa certificate
al token determinado si la clave certificada ya está almacenada en este token. Después de una solicitud de certificación exitosa, se debe usar esta función para almacenar el certificado obtenido y ponerlo a disposición del sistema operativo y el navegador para la autenticación.
Parámetros
-
tokenId
string
Es el ID de un token que devuelve
getTokens
. -
certificado
ArrayBuffer
Es la codificación DER de un certificado X.509.
Muestra
-
Promise<void>
Chrome 131 y versiones posteriores
removeCertificate()
chrome.enterprise.platformKeys.removeCertificate(
tokenId: string,
certificate: ArrayBuffer,
): Promise<void>
Quita certificate
del token proporcionado si está presente. Se debe usar para quitar los certificados obsoletos, de modo que no se tengan en cuenta durante la autenticación y no desordenen la elección de certificados. Se debe usar para liberar almacenamiento en el almacén de certificados.
Parámetros
-
tokenId
string
Es el ID de un token que devuelve
getTokens
. -
certificado
ArrayBuffer
Es la codificación DER de un certificado X.509.
Muestra
-
Promise<void>
Chrome 131 y versiones posteriores