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