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

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

  • callback

    function

    The callback parameter looks like:

    (tokens: Token[]) => void

    • tokens

      Token[]

      可用令牌列表。

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.一粒技术服务.

results matching ""

    No results matching ""