Start · Sprachen · JavaScript · Referenz · RTCCertificate.expires

RTCCertificate.expires

Eigenschaft

Schreibgeschützte Eigenschaft, die den Ablaufzeitpunkt eines <code>RTCCertificate</code> als Zeitstempel in Millisekunden seit der Unix-Epoche liefert.

seit JavaScript Baseline: alle modernen Browser (Chrome 49+, Firef Kategorie: webapi

Signatur

RTCCertificate.expires

Beschreibung

Die Eigenschaft expires eines RTCCertificate-Objekts gibt an, bis wann das Zertifikat gültig ist. Der Wert ist eine Zahl (DOMTimeStamp/EpochTimeStamp) in Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC. Er lässt sich also direkt an new Date() übergeben oder mit Date.now() vergleichen.

Zertifikate für WebRTC erzeugst du mit RTCPeerConnection.generateCertificate(). Sie werden beim DTLS-Handshake genutzt, um die Verbindung zwischen zwei Peers abzusichern. Wenn du ein Zertifikat über mehrere Sitzungen hinweg verwenden willst, etwa weil es in IndexedDB gespeichert ist und der Fingerabdruck gleich bleiben soll, musst du vor jeder Nutzung mit expires prüfen, ob es noch gültig ist.

Der Browser legt die Gültigkeitsdauer beim Erzeugen fest. Mit der nicht standardisierten Option expires in generateCertificate() (relative Dauer in Millisekunden) kann Chrome eine kürzere Laufzeit vergeben. Ohne diese Option sind es meist rund 30 Tage. Die Spezifikation begrenzt die Laufzeit auf höchstens 365 Tage.

Rückgabewert

Typ
number
Beschreibung
Ablaufzeitpunkt als Zeitstempel in Millisekunden seit der Unix-Epoche (UTC). Der Wert ist schreibgeschützt.

Beispiele

Ablaufdatum eines neu erzeugten Zertifikats anzeigen

const cert = await RTCPeerConnection.generateCertificate({
  name: 'ECDSA',
  namedCurve: 'P-256'
});

console.log('Rohwert:', cert.expires);
console.log('Gültig bis:', new Date(cert.expires).toLocaleString('de-DE'));
Rohwert: 1735689600000 Gültig bis: 1.1.2025, 01:00:00

Restlaufzeit in Tagen berechnen

const cert = await RTCPeerConnection.generateCertificate({
  name: 'RSASSA-PKCS1-v1_5',
  modulusLength: 2048,
  publicExponent: new Uint8Array([1, 0, 1]),
  hash: 'SHA-256'
});

const restTage = Math.floor((cert.expires - Date.now()) / 86_400_000);
console.log(`Zertifikat läuft in ${restTage} Tagen ab.`);
Zertifikat läuft in 29 Tagen ab.

Gespeichertes Zertifikat wiederverwenden oder erneuern

// Mindestrestlaufzeit: 1 Tag
const MIN_REST_MS = 24 * 60 * 60 * 1000;

const getValidCertificate = async (storedCert) => {
  if (storedCert && storedCert.expires - Date.now() > MIN_REST_MS) {
    return storedCert; // noch gültig, Fingerabdruck bleibt gleich
  }
  console.log('Zertifikat abgelaufen oder fehlt – erzeuge neues.');
  return RTCPeerConnection.generateCertificate({ name: 'ECDSA', namedCurve: 'P-256' });
};

// storedCert könnte z. B. aus IndexedDB stammen (RTCCertificate ist serialisierbar)
const cert = await getValidCertificate(null);
const pc = new RTCPeerConnection({ certificates: [cert] });
console.log('Verbindung nutzt Zertifikat bis', new Date(cert.expires).toISOString());
Zertifikat abgelaufen oder fehlt – erzeuge neues. Verbindung nutzt Zertifikat bis 2025-01-01T00:00:00.000Z

// Wichtig · Fallstricke

  • Kein Date-Objekt: expires ist eine Zahl in Millisekunden. Für eine lesbare Anzeige musst du erst new Date(cert.expires) aufrufen.
  • Abgelaufene Zertifikate: Übergibst du ein abgelaufenes Zertifikat in certificates an den Konstruktor RTCPeerConnection, wirft er einen InvalidAccessError. Prüfe expires deshalb vorher.
  • Uhrzeit des Systems: Die Prüfung vergleicht mit der lokalen Systemuhr (Date.now()). Geht diese falsch, sind die Ergebnisse ungenau. Plane daher einen Sicherheitspuffer ein.
  • Nicht standardisierte Laufzeit-Option: Die Option expires in generateCertificate() ist in der Spezifikation nicht garantiert und wird nicht von allen Browsern beachtet.
  • Kompatibilität: Die Eigenschaft wird in allen aktuellen Browsern unterstützt. RTCCertificate ist nur in sicheren Kontexten (HTTPS) sinnvoll nutzbar und steht in Node.js ohne Zusatzbibliotheken nicht zur Verfügung.