Start · Sprachen · JavaScript · Referenz · RTCCertificateStats.issuerCertificateId

RTCCertificateStats.issuerCertificateId

Eigenschaft

String mit der <code>id</code> des <code>RTCCertificateStats</code>-Objekts im selben Bericht, das das Aussteller-Zertifikat (nächstes Glied der Zertifikatskette) beschreibt.

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

Signatur

RTCCertificateStats.issuerCertificateId

Beschreibung

Die schreibgeschützte Eigenschaft issuerCertificateId des Wörterbuchs RTCCertificateStats verweist auf das Zertifikat, das das aktuelle Zertifikat ausgestellt hat. Sie enthält die id eines weiteren RTCCertificateStats-Eintrags im selben RTCStatsReport. So lässt sich eine Zertifikatskette vom Blatt-Zertifikat bis zum obersten Zertifikat Schritt für Schritt verfolgen.

Die Zertifikats-Statistiken bekommt man über RTCPeerConnection.getStats(). Ein Eintrag mit type === "certificate" steht für ein DTLS-Zertifikat, das ein Transport verwendet (lokal oder entfernt). Welche Zertifikate zu einem Transport gehören, erfährt man über RTCTransportStats.localCertificateId und remoteCertificateId.

In WebRTC sind Zertifikate meist selbstsigniert, zum Beispiel wenn sie mit RTCPeerConnection.generateCertificate() erzeugt wurden. Dann gibt es keine Kette, und issuerCertificateId ist undefined. Die Eigenschaft hat nur dann einen Wert, wenn die Gegenseite eine echte Kette mit mehreren Zertifikaten übermittelt.

Rückgabewert

Typ
string | undefined
Beschreibung
Die id des RTCCertificateStats-Objekts für das Aussteller-Zertifikat. Ist das Zertifikat selbstsigniert oder das letzte der Kette, ist der Wert undefined, denn die Eigenschaft fehlt dann im Objekt.

Beispiele

Aussteller-Verweis eines Zertifikats auslesen

const pc = new RTCPeerConnection();
// ... Verbindung aufbauen (Angebot, Antwort, ICE) ...

const report = await pc.getStats();
report.forEach((stats) => {
  if (stats.type === "certificate") {
    console.log(stats.id, "→ Aussteller:", stats.issuerCertificateId ?? "keiner (selbstsigniert)");
  }
});
CFxx:yy:zz... → Aussteller: keiner (selbstsigniert)

Vollständige Zertifikatskette des entfernten Partners ablaufen

const getRemoteCertChain = async (pc) => {
  const report = await pc.getStats();
  const transport = [...report.values()].find((s) => s.type === "transport");
  if (!transport?.remoteCertificateId) return [];

  const chain = [];
  const seen = new Set();
  let certId = transport.remoteCertificateId;

  // Der Kette folgen, bis kein Aussteller mehr angegeben ist
  while (certId && !seen.has(certId)) {
    seen.add(certId);
    const cert = report.get(certId);
    if (!cert) break;
    chain.push({
      fingerprint: cert.fingerprint,
      algorithm: cert.fingerprintAlgorithm
    });
    certId = cert.issuerCertificateId;
  }
  return chain;
};

const chain = await getRemoteCertChain(pc);
console.log(`Kettenlänge: ${chain.length}`, chain);
Kettenlänge: 1 [{ fingerprint: "AB:CD:...", algorithm: "sha-256" }]

Prüfen, ob ein Zertifikat selbstsigniert ist

const isSelfSigned = (certStats) => certStats.issuerCertificateId === undefined;

const report = await pc.getStats();
for (const stats of report.values()) {
  if (stats.type === "certificate") {
    console.log(stats.fingerprint, isSelfSigned(stats) ? "selbstsigniert" : "hat Aussteller");
  }
}
AB:CD:... selbstsigniert

// Wichtig · Fallstricke

  • Meist undefined: WebRTC-Zertifikate sind in der Regel selbstsigniert. Prüfen Sie den Wert deshalb immer, bevor Sie ihn verwenden, etwa mit ?? oder optionalem Verketten.
  • Die id gilt nur innerhalb desselben RTCStatsReport. Schlagen Sie sie mit report.get(id) im selben Bericht nach. Verweise zwischen verschiedenen getStats()-Aufrufen sind nicht garantiert gleich.
  • Die Zertifikats-Statistiken sind erst verfügbar, nachdem der DTLS-Handshake abgeschlossen ist. Vorher fehlen die Einträge mit type: "certificate".
  • Wenn Sie der Kette in einer Schleife folgen, sollten Sie bereits besuchte IDs merken. Das schützt vor Endlosschleifen, falls Daten fehlerhaft sind.
  • Browser-Kompatibilität: Die Eigenschaft wird von aktuellen Versionen von Chromium, Firefox und Safari unterstützt. Ältere Browser liefern sie womöglich nicht, auch wenn eine Kette vorhanden ist.