Start · Sprachen · JavaScript · Referenz · RTCCertificateStats.type

RTCCertificateStats.type

Eigenschaft

Die Eigenschaft <code>type</code> eines <code>RTCCertificateStats</code>-Objekts ist immer der String <code>"certificate"</code> und kennzeichnet den Statistikeintrag als Zertifikatsstatistik.

seit JavaScript Baseline 2023: Chrome, Edge, Firefox, Safari Kategorie: webapi

Signatur

RTCCertificateStats.type

Beschreibung

Die Eigenschaft type gehört zum Wörterbuch RTCCertificateStats. Sie ist bei diesem Statistiktyp immer "certificate". Alle Einträge in einem RTCStatsReport haben ein type-Feld. Daran erkennt man, welche Art von Statistik ein Eintrag enthält, z. B. "inbound-rtp", "transport" oder eben "certificate".

Zertifikatsstatistiken beschreiben die Zertifikate, die beim DTLS-Handshake einer RTCPeerConnection verwendet werden: das lokale Zertifikat und das Zertifikat der Gegenstelle. Zu den wichtigsten Feldern gehören fingerprint, fingerprintAlgorithm, base64Certificate und issuerCertificateId.

Man braucht type vor allem zum Filtern, wenn man mit RTCPeerConnection.getStats() einen Bericht abgerufen hat und daraus nur die Zertifikatseinträge verarbeiten möchte, etwa um Fingerabdrücke zu protokollieren oder die Identität der Gegenstelle zu prüfen.

Rückgabewert

Typ
string
Beschreibung
Immer der String "certificate" (ein Wert der Aufzählung RTCStatsType).

Beispiele

Zertifikatseinträge aus einem Statistikbericht filtern

const pc = new RTCPeerConnection();
pc.createDataChannel('test');

// ... Verbindung aufbauen (Offer/Answer, ICE) ...

const logCertificates = async () => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'certificate') {
      console.log(stats.id, stats.fingerprintAlgorithm, stats.fingerprint);
    }
  });
};

logCertificates();
RTCCertificate_AB:CD:... sha-256 AB:CD:EF:12:...

Lokales und entferntes Zertifikat über den Transport ermitteln

const getDtlsFingerprints = async (pc) => {
  const report = await pc.getStats();
  const transport = [...report.values()].find((s) => s.type === 'transport');
  if (!transport) return null;

  const local = report.get(transport.localCertificateId);
  const remote = report.get(transport.remoteCertificateId);

  return {
    local: local?.type === 'certificate' ? local.fingerprint : null,
    remote: remote?.type === 'certificate' ? remote.fingerprint : null,
  };
};

// Aufruf nach erfolgreichem Verbindungsaufbau
// console.log(await getDtlsFingerprints(pc));
{ local: 'AB:CD:...', remote: '12:34:...' }

Statistiken nach Typ gruppieren

const countStatsByType = async (pc) => {
  const report = await pc.getStats();
  const counts = {};
  for (const stats of report.values()) {
    counts[stats.type] = (counts[stats.type] ?? 0) + 1;
  }
  return counts;
};

// console.log(await countStatsByType(pc));
{ certificate: 2, 'candidate-pair': 1, transport: 1, 'local-candidate': 3, ... }

// Wichtig · Fallstricke

  • Zertifikatseinträge gibt es erst, wenn der DTLS-Transport steht. Vor dem Verbindungsaufbau enthält der Bericht meist keinen Eintrag mit type === "certificate".
  • Ein RTCStatsReport ist ein Map-ähnliches Objekt, kein Array. Verwende forEach(), values() oder get(id), aber nicht filter() direkt auf dem Bericht.
  • Bei einer Zertifikatskette verweist issuerCertificateId auf einen weiteren Eintrag mit demselben type. Es können also mehr als zwei Zertifikatseinträge vorkommen.
  • Kompatibilität: In älteren Browserversionen fehlten Zertifikatsstatistiken oder waren unvollständig. Frage die Felder deshalb defensiv ab, z. B. mit optionaler Verkettung (?.).
  • Datenschutz: Fingerabdrücke und base64Certificate können beim Protokollieren Rückschlüsse auf Sitzungen zulassen. Übertrage sie nicht ungefiltert an Analysedienste.