chrome.enterprise.platformKeys
Description
使用 chrome.enterprise.platformKeys
API 生成密钥并为这些密钥安装证书。证书将由平台管理,可用于 TLS 身份验证、网络访问或通过 chrome.platformKeys 进行其他扩展。
Permissions
enterprise.platformKeys
Availability
Foreground only
注意:此 API 仅适用于策略预安装的扩展程序extensions pre-installed by policy。
# Usage
此 API 注册客户端证书的典型用法遵循以下步骤:
- 使用enterprise.platformKeys.getTokens 获取所有可用的令牌。
- 找到
id
等于“user”
的令牌。随后使用此令牌。 - 使用
generateKey Token
方法(在SubtleCrypto
中定义)生成密钥对。这将返回密钥的句柄。 - 使用
exportKey
Token 方法(在 SubtleCrypto 中定义)导出公钥。 - 使用
sign
Token 方法(在 SubtleCrypto 中定义)创建认证请求数据的签名。 - 完成认证请求并将其发送给认证机构。
- 如果收到证书,请使用 enterprise.platformKeys.importCertificate
下面是一个示例,显示了除认证请求的构建和发送之外的主要 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) {
// 使用公钥构建认证请求。
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.
// 用 |signature| 完成认证请求。 // 向 CA 发出请求,回调 // onClientCertificateReceived.
},
console.log.bind(console));
}
function onClientCertificateReceived(userToken, certificate) {
chrome.enterprise.platformKeys.importCertificate(userToken.id, certificate);
}
getUserToken(generateAndSign);
Summary
Types
Methods
Types
Token
PROPERTIES
id
string
唯一标识此令牌
Token
。静态 ID 是“用户
user
”和“系统system
”,分别是指平台的特定用户和系统范围的硬件令牌。任何其他令牌(具有其他标识符)可能会返回enterprise.platformKeys.getTokens
softwareBackedSubtleCrypto
SubtleCrypto
Pending
实现 WebCrypto 的 SubtleCrypto 接口。包括密钥生成在内的加密操作是由软件支持的。密钥的保护以及不可提取属性的实现是在软件中完成的,因此密钥的保护不如硬件支持的密钥。
只能生成模数长度
modulusLength
高达 2048 的不可提取的 RSASSA-PKCS1-V1_5 密钥。每个密钥最多可用于签署数据一次。在特定令牌
Token
上生成的密钥不能与任何其他令牌一起使用,也不能与window.crypto.subtle
一起使用。同样,使用window.crypto.subtle
创建的Key
对象不能与此接口一起使用。subtleCrypto
SubtleCrypto
实现 WebCrypto 的 SubtleCrypto 接口。包括密钥生成在内的加密操作是由硬件支持的。
只能生成模数长度
modulusLength
高达 2048 的不可提取的 RSASSA-PKCS1-V1_5 密钥和具有namedCurve
P-256 的 ECDSA。每个密钥最多可用于签署数据一次。在特定
Token
上生成的密钥不能与任何其他令牌一起使用,也不能与window.crypto.subtle
一起使用。同样,使用window.crypto.subtle
创建的Key
对象不能与此接口一起使用。
Methods
challengeMachineKey
chrome.enterprise.platformKeys.challengeMachineKey(
challenge: ArrayBuffer,
registerKey?: boolean,
callback: function,
)
Chrome 50+
挑战由硬件支持的企业机器密钥,并作为远程证明协议的一部分发出响应。仅在 Chrome 操作系统上有用,并与 Verified Access Web API 结合使用,后者既可以发出质询,也可以验证响应。Verified Access Web API 的成功验证是以下所有情况的强烈信号: 当前设备是合法的 Chrome 操作系统设备。 当前设备由验证时指定的域管理。 当前登录的用户由验证期间指定的域管理。 当前设备状态符合企业设备策略。例如,策略可能指定设备不得处于开发者模式。 *验证发出的任何设备身份都与当前设备的硬件紧密绑定。企业机器密钥不驻留在“系统system
”令牌中,并且不能被任何其他 API 访问。
PARAMETERS
challenge
ArrayBuffer
Verified Access Web API 发出的挑战。
registerKey
boolean optional
Chrome 59+
如果设置,则当前的企业机器密钥使用“系统
system
”令牌(token)注册并放弃企业机器密钥角色。然后可以将该密钥与证书相关联并像任何其他签名密钥一样使用。此密钥是 2048 位 RSA。随后对该函数的调用将生成一个新的企业机器密钥。callback
function
The
callback
parameter looks like:(response: ArrayBuffer) => void
response
ArrayBuffer
挑战响应。
challengeUserKey
chrome.enterprise.platformKeys.challengeUserKey(
challenge: ArrayBuffer,
registerKey: boolean,
callback: function,
)
Chrome 50+
质询硬件支持的企业用户密钥,并作为远程证明协议的一部分发出响应。仅在 Chrome 操作系统上有用,并与 Verified Access Web API 结合使用,后者既可以发出质询,也可以验证响应。Verified Access Web API 的成功验证是以下所有情况的强烈信号: 当前设备是合法的 Chrome 操作系统设备。 当前设备由验证时指定的域管理。* 当前登录的用户由验证时指定的域管理。 当前设备状态符合企业用户策略。例如,策略可能指定设备不得处于开发者模式。\ 验证发出的公钥与当前设备的硬件和当前登录的用户紧密绑定。此功能受到高度限制,如果未管理当前设备、未管理当前用户或未通过企业用户策略明确为调用方启用此操作,则此功能将失败。企业用户密钥不存在于“用户user
”令牌(token)中,并且不能被任何其他 API 访问。
PARAMETERS
challenge
ArrayBuffer
Verified Access Web API 发出的挑战(challenge)。
registerKey
boolean
如果设置,当前的企业用户密钥将使用“用户
user
”令牌注册并放弃企业用户密钥角色。然后可以将该密钥与证书相关联并像任何其他签名密钥一样使用。此密钥是 2048 位 RSA。随后对该函数的调用将生成一个新的企业用户密钥。callback
function
The
callback
parameter looks like:(response: ArrayBuffer) => void
response
ArrayBuffer
挑战响应(The challenge response)。
getCertificates
chrome.enterprise.platformKeys.getCertificates(
tokenId: string,
callback: function,
)
返回从给定令牌可用的所有客户端证书的列表。可用于检查可用于特定身份验证的客户端证书的存在和过期。
PARAMETERS
tokenId
string
getTokens
返回的 Token 的 id。callback
function
The
callback
parameter looks like:(certificates: ArrayBuffer[]) => void
certificates
ArrayBuffer[]
证书列表,每个都采用 X.509 证书的 DER 编码。
getTokens
chrome.enterprise.platformKeys.getTokens(
callback: function,
)
返回可用的令牌。在普通用户的会话中,该列表将始终包含 ID
为“user”
的用户令牌。如果系统范围的 TPM 令牌可用,则返回的列表还将包含 ID 为“system”
的系统范围的令牌。对于此设备(例如 Chromebook 意义上的设备)上的所有会话,系统范围的令牌将是相同的。
PARAMETERS
importCertificate
chrome.enterprise.platformKeys.importCertificate(
tokenId: string,
certificate: ArrayBuffer,
callback?: function,
)
如果认证密钥已存储在此令牌中,则将证书certificate
导入给定令牌。认证请求成功后,应使用此功能存储获得的证书,并使其可用于操作系统和浏览器进行身份验证。
PARAMETERS
tokenId
string
getTokens
返回的 Token 的 id。certificate
ArrayBuffer
X.509 证书的 DER 编码。
callback
function optional
The
callback
parameter looks like:() => void
removeCertificate
chrome.enterprise.platformKeys.removeCertificate(
tokenId: string,
certificate: ArrayBuffer,
callback?: function,
)
如果存在,则从给定令牌中删除证书certificate
。应该用于删除过时的证书,以便在身份验证期间不考虑它们并且不会使证书选择混乱。应该用于释放证书存储中的存储空间。
PARAMETERS
tokenId
string
getTokens
返回的 Token 的 id。certificate
ArrayBuffer
X.509 证书的 DER 编码。
callback
function optional
The
callback
parameter looks like:() => void
By.一粒技术服务.