Signatur
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
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'));
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.`);
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());
// Wichtig · Fallstricke
- Kein
Date-Objekt:expiresist eine Zahl in Millisekunden. Für eine lesbare Anzeige musst du erstnew Date(cert.expires)aufrufen. - Abgelaufene Zertifikate: Übergibst du ein abgelaufenes Zertifikat in
certificatesan den KonstruktorRTCPeerConnection, wirft er einenInvalidAccessError. Prüfeexpiresdeshalb 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
expiresingenerateCertificate()ist in der Spezifikation nicht garantiert und wird nicht von allen Browsern beachtet. - Kompatibilität: Die Eigenschaft wird in allen aktuellen Browsern unterstützt.
RTCCertificateist nur in sicheren Kontexten (HTTPS) sinnvoll nutzbar und steht in Node.js ohne Zusatzbibliotheken nicht zur Verfügung.