RTCPeerConnection: generateCertificate() 静态方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

RTCPeerConnection 接口的 generateCertificate() 静态函数会创建一个 X.509 证书和相应的私钥,并返回一个 Promise,该 Promise 在生成新 RTCCertificate 对象后解析。

语法

js
RTCPeerConnection.generateCertificate(keygenAlgorithm)

参数

keygenAlgorithm

一个 Web Crypto API 算法标识符字符串或对象。有关该对象的格式的详细信息,请参阅 SubtleCrypto.generateKey()

注意: generateCertificate() 是一个静态方法,因此它始终在 RTCPeerConnection 接口本身上调用,而不是在其实例上调用。

返回值

一个 Promise,它解析为一个新的 RTCCertificate 对象,其中包含基于指定选项的新密钥。

异常

NotSupportedError DOMException

如果 keygenAlgorithm 的规范化形式指定了浏览器不支持或不允许用于 RTCPeerConnection 的算法或算法设置,则会抛出此错误。

可能会发生其他错误;例如,如果指定的 keygenAlgorithm 无法成功转换为 RTCCertificateExpiration 字典,则在转换过程中发生的错误将被抛出。

描述

如果指定了字符串,则它必须是一个兼容 Web Crypto API 的算法名称字符串。或者,您可以通过提供基于 Web Crypto API 的 Algorithm 类的子类之一的对象来提供算法配置的特定详细信息。

标准配置

所有浏览器都必须支持以下两种配置。浏览器可能具有与此不同的默认设置,但这些始终受支持。

RSASSA-PKCS1-v1_5

js
let stdRSACertificate = {
  name: "RSASSA-PKCS1-v1_5",
  modulusLength: 2048,
  publicExponent: new Uint8Array([1, 0, 1]),
  hash: "SHA-256",
};

ECDSA

js
let stdECDSACertificate = {
  name: "ECDSA",
  namedCurve: "P-256",
};

证书过期时间

默认情况下,新证书的 expires 设置为 2592000000 毫秒(即 30 天)。过期时间不能超过 31536000000 毫秒(即 365 天)。另外值得注意的是,浏览器可能会自行进一步限制证书的过期时间。

示例

指定算法详细信息

此示例请求一个使用 SHA-256 哈希和 2048 位模数的 RSASSA-PKCS1-v1_5 证书。

js
RTCPeerConnection.generateCertificate({
  name: "RSASSA-PKCS1-v1_5",
  hash: "SHA-256",
  modulusLength: 2048,
  publicExponent: new Uint8Array([1, 0, 1]),
}).then((cert) => {
  const pc = new RTCPeerConnection({ certificates: [cert] });
});

按名称指定算法

下面的示例通过指定一个字符串来请求一个 ECDSA 证书。

js
RTCPeerConnection.generateCertificate("ECDSA");

规范

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

浏览器兼容性

另见