RTCCertificate: getFingerprints() 方法

RTCCertificate 接口的 getFingerprints() 方法用于获取证书指纹数组。

应用程序可以使用此方法将客户端证书指纹与服务器的证书指纹进行比较。服务器和客户端可能支持不同的算法集:对于客户端和服务器都支持的算法集,所有指纹值都应匹配。

语法

js
getFingerprints()

参数

返回值

一个 Array 指纹值。每个指纹由一个具有以下属性的对象表示

algorithm

一个字符串,指示用于在 value 中创建指纹的哈希函数算法。允许的值包括:"sha-1", "sha-224", "sha-256", "sha-384", "sha-512", "md5", "md2"

value

一个字符串,包含使用 algorithm 哈希函数计算的证书指纹,以小写十六进制字符串表示。格式在 RFC4572,第 5 节 中有更精确的定义。

示例

获取证书指纹

此示例展示了如何获取证书指纹并将它们与来自服务器的指纹进行比较。

首先,我们创建一个连接并获取指纹。我们还使用“某种机制”从服务器获取指纹。

js
const rtcPeerConnection = new RTCPeerConnection();

// Get the certificate fingerprints from the client.
const fingerprintsFromClient = rtcPeerConnection.certificate.getFingerprints();

// Get the certificate fingerprints from the server (pseudo code)
const fingerprintsFromServer = ...;

有许多方法可以比较指纹数组。这里我们将数组转换为字典对象,其中算法名称是属性,然后进行比较。这之所以有效是因为每个算法只能存在一个指纹值。(还有许多其他方法可以对这两个数组进行排序和比较)。

js
let clientFingerprintDict = Object.fromEntries(
  fingerprintsFromClient.map((x) => [x.algorithm, x.value]),
);
let serverFingerprintDict = Object.fromEntries(
  fingerprintsFromServer.map((x) => [x.algorithm, x.value]),
);

// Function to compare two objects and return true if there are common properties
// and all common properties match.
function compareObjects(obj1, obj2) {
  const commonProperties = Object.keys(obj1).filter((prop) =>
    obj2.hasOwnProperty(prop),
  );
  // Return false if there are no common properties
  if (Object.keys(commonProperties).length === 0) return false;

  // Return false if any common properties don't match
  for (const prop of commonProperties) {
    if (obj1[prop] !== obj2[prop]) {
      return false;
    }
  }

  return true;
}

const matchingFingerprints = compareObjects(
  clientFingerprintDict,
  serverFingerprintDict,
);
console.log(matchingFingerprints);

规范

规范
WebRTC:浏览器中的实时通信
# dom-rtccertificate-getfingerprints

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。