Spec-Zone.ru › Web APIs

RTCCertificate: метод getFingerprints()

Метод getFingerprints() интерфейса RTCCertificate используется для получения массива отпечатков сертификата.

Приложение может использовать этот метод для сравнения отпечатков пальцев клиентского сертификата с отпечатками пальцев серверного сертификата. Сервер и клиент могут поддерживать разные наборы алгоритмов: все значения отпечатков пальцев для набора алгоритмов, поддерживаемых как клиентом, так и сервером, должны совпадать.

Синтаксис

getFingerprints()

Параметры

Нет.

Возвращаемое значение

Массив значений отпечатков пальцев. Каждый отпечаток пальца представлен объектом со следующими свойствами:

algorithm

Строка, указывающая алгоритм хеш-функции, используемый для создания отпечатка пальца в value. Разрешенные значения включают: "sha-1", "sha-224", "sha-256", "sha-384", "sha-512", "md5", "md2".

value

Строка, содержащая отпечаток пальца сертификата в строке шестнадцатеричного представления в нижнем регистре, как рассчитанная с помощью хеш-функции algorithm. Формат более точно определён в RFC4572, Раздел 5.

Примеры

Получение отпечатков пальцев сертификата

Этот пример демонстрирует, как получить отпечатки пальцев сертификата и сравнить их с отпечатками пальцев сервера.

Сначала мы создаём соединение и получаем отпечатки пальцев. Мы также получаем отпечатки пальцев от сервера, используя «некоторый механизм».

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 = ...;

Существует множество способов сравнения массивов отпечатков пальцев. Здесь мы преобразуем массивы в объекты словаря, где имя алгоритма является свойством, а затем сравниваем их. Это работает, потому что для каждого алгоритма может существовать только одно значение отпечатка пальца. (Существует много других способов сортировать и сравнивать два массива).

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

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
getFingerprints 61 79 Нет 48 12.1 61 Нет 45 12.2 8.0 61

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/RTCCertificate/getFingerprints

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API