Signatur
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
"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();
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));
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));
// 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
RTCStatsReportist ein Map-ähnliches Objekt, kein Array. VerwendeforEach(),values()oderget(id), aber nichtfilter()direkt auf dem Bericht. - Bei einer Zertifikatskette verweist
issuerCertificateIdauf einen weiteren Eintrag mit demselbentype. 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
base64Certificatekönnen beim Protokollieren Rückschlüsse auf Sitzungen zulassen. Übertrage sie nicht ungefiltert an Analysedienste.