Start · Sprachen · JavaScript · Referenz · RTCTransportStats.srtpCipher

RTCTransportStats.srtpCipher

Eigenschaft

Liefert den beschreibenden Namen des SRTP-Schutzprofils (z. B. <code>"AES_CM_128_HMAC_SHA1_80"</code>), mit dem Medien über den Transport verschlüsselt werden.

seit JavaScript Chrome/Edge 90+, Firefox (teilweise), Safari: eing Kategorie: webapi

Signatur

RTCTransportStats.srtpCipher

Beschreibung

Die Eigenschaft srtpCipher gehört zum Wörterbuch RTCTransportStats, also zu den Statistiken vom Typ "transport", die RTCPeerConnection.getStats() zurückgibt. Sie enthält als String den Namen des Schutzprofils, das beim DTLS-SRTP-Schlüsselaustausch ausgehandelt wurde. Die Namen stammen aus dem IANA-Register „DTLS-SRTP Protection Profiles“, typische Werte sind "AES_CM_128_HMAC_SHA1_80", "AEAD_AES_128_GCM" oder "AEAD_AES_256_GCM".

Nützlich ist die Eigenschaft vor allem für Diagnose, Monitoring und Sicherheitsprüfungen: So lässt sich protokollieren, welche Verschlüsselung eine WebRTC-Verbindung tatsächlich verwendet, oder prüfen, ob ein Gegenüber nur schwächere Profile unterstützt. Zusammen mit tlsVersion, dtlsCipher und dtlsState ergibt sich ein vollständiges Bild der Transportsicherheit.

Der Wert steht erst fest, wenn der DTLS-Handshake abgeschlossen ist (dtlsState === "connected"). Vorher fehlt die Eigenschaft meist ganz oder ist undefined.

Rückgabewert

Typ
string | undefined
Beschreibung
Name des ausgehandelten SRTP-Schutzprofils laut IANA-Register, z. B. "AEAD_AES_128_GCM". undefined, solange noch kein DTLS-SRTP-Handshake abgeschlossen ist oder der Browser die Eigenschaft nicht unterstützt.

Beispiele

SRTP-Profil einer bestehenden Verbindung auslesen

// pc ist eine bereits verbundene RTCPeerConnection
const logSrtpCipher = async (pc) => {
  const stats = await pc.getStats();
  stats.forEach((report) => {
    if (report.type === 'transport') {
      console.log('DTLS-Status:', report.dtlsState);
      console.log('SRTP-Profil:', report.srtpCipher ?? 'nicht verfügbar');
    }
  });
};

await logSrtpCipher(pc);
DTLS-Status: connected SRTP-Profil: AEAD_AES_128_GCM

Warten, bis der Handshake fertig ist, dann Sicherheitsdaten sammeln

const getSecurityInfo = async (pc) => {
  const stats = await pc.getStats();
  const transport = [...stats.values()].find((r) => r.type === 'transport');
  if (!transport) return null;
  return {
    dtlsState: transport.dtlsState,
    tlsVersion: transport.tlsVersion,
    dtlsCipher: transport.dtlsCipher,
    srtpCipher: transport.srtpCipher
  };
};

pc.addEventListener('connectionstatechange', async () => {
  if (pc.connectionState === 'connected') {
    console.table(await getSecurityInfo(pc));
  }
});
dtlsState: connected, tlsVersion: FEFD, dtlsCipher: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, srtpCipher: AEAD_AES_128_GCM

Warnung bei nicht-AEAD-Profilen ausgeben

const checkCipherStrength = async (pc) => {
  const stats = await pc.getStats();
  for (const report of stats.values()) {
    if (report.type !== 'transport' || !report.srtpCipher) continue;
    const isAead = report.srtpCipher.startsWith('AEAD_');
    if (!isAead) {
      console.warn(`Älteres SRTP-Profil aktiv: ${report.srtpCipher}`);
    } else {
      console.info(`Modernes SRTP-Profil: ${report.srtpCipher}`);
    }
  }
};

await checkCipherStrength(pc);
Älteres SRTP-Profil aktiv: AES_CM_128_HMAC_SHA1_80

// Wichtig · Fallstricke

  • Nur nach dem Handshake verfügbar: Vor dtlsState === "connected" fehlt die Eigenschaft. Immer mit ?. bzw. ?? absichern.
  • Browser-Unterstützung: Chromium-basierte Browser liefern den Wert zuverlässig. Firefox und Safari unterstützen RTCTransportStats nur teilweise; hier kann srtpCipher fehlen. Vor produktivem Einsatz mit Fallback prüfen.
  • Datenschutz/Fingerprinting: Die Werte sind implementierungsspezifisch und sollten nur zu Diagnosezwecken erfasst werden.
  • Der Wert ist rein informativ. Das Profil lässt sich über die WebRTC-API nicht festlegen, der Browser handelt es automatisch aus.
  • Bei gebündelten Transporten (bundlePolicy: "max-bundle") gibt es normalerweise nur einen "transport"-Bericht, ohne Bündelung eventuell mehrere.