Important Notes
- In OpenTok.js 2.27.0+ funktioniert die Ende-zu-Ende-Verschlüsselung nicht, wenn Sie sich mit Clients verbinden, die eine frühere Version von OpenTok.js verwenden. Wenn Sie Ihre Anwendung aktualisieren, um OpenTok.js 2.27.0+ zu verwenden, stellen Sie sicher, dass alle Clients OpenTok.js 2.27.0+ verwenden, wenn die Anwendung eine Ende-zu-Ende-Verschlüsselung verwendet.
- Die Unterstützung von Ende-zu-Ende-Verschlüsselung auf WebKit-basierten Browsern, z. B. Safari auf macOS/iOS und Chrome auf iOS, ist erst ab Version OpenTok.js 2.30.0 verfügbar.
Note about Content Security Policies (CSP)
Wenn die script-src Richtlinie gesetzt ist, stellen Sie sicher, dass 'wasm-unsafe-eval' angegeben ist. Andernfalls wird WebAssembly, das für die Ende-zu-Ende-Verschlüsselung erforderlich ist, am Laden und Ausführen auf der Seite gehindert.
Initializing a session with a secret
End-to-End-verschlüsselte Sitzungen werden mit Hilfe von Server-APIs erstellt (siehe Aktivieren der Verschlüsselung mit dem REST-API). Damit ein Web-Client einer Ende-zu-Ende-verschlüsselten Sitzung beitritt, geben Sie ein Verschlüsselungsgeheimnis an, wenn Sie die Funktion OT.initSession() Methode:
const session = OT.initSession('api-key', 'session-id', {
encryptionSecret: 'initialEncryptionSecret',
});
Ein gültiges Geheimnis ist eine Zeichenfolge zwischen 8 und 256 Zeichen. Das Geheimnis kann später mit der Option Session.setEncryptionSecret() Methode (siehe Ändern der geheim(siehe unten).
Checking whether the browser supports end-to-end encryption
Verwenden Sie die OT.hasEndToEndEncryptionSupport() Methode, um zu prüfen, ob der Browser des Clients eine Ende-zu-Ende-Verschlüsselung unterstützt:
if (OT.hasEndToEndEncryptionSupport()) {
// Proceed with connecting to the session
}
else {
// Notify the user that they cannot join the session
}
Eine Ende-zu-Ende-Verschlüsselung wird in Firefox derzeit nicht unterstützt.
Changing the secret
Sie können das Geheimnis mit der Funktion Session.setEncryptionSecret() Methode, nachdem die Sitzung verbunden wurde:
await session.setEncryptionSecret('newEncryptionSecret');
Events and errors
Ereignisse und Fehler sind wesentlich für die Verwaltung des benutzergesteuerten Verschlüsselungsverhaltens. Bei der Ende-zu-Ende-Verschlüsselung wird das Modell des gemeinsamen Geheimnisses verwendet: Es wird erwartet, dass alle Teilnehmer der Sitzung dasselbe Geheimnis verwenden, um ihre Medien zu verschlüsseln und die der anderen zu entschlüsseln.
Ein Subscriber-Objekt sendet eine encryptionSecretMismatch Ereignis, wenn der Abonnent nicht in der Lage ist, die Medien eines Streams zu entschlüsseln. Es ist wichtig, dem Benutzer mitzuteilen, dass die Medien aufgrund eines Verschlüsselungsfehlers und nicht aufgrund eines Verbindungsfehlers oder eines Audio-/Videofehlers nicht empfangen werden können:
subscriber.on('encryptionSecretMismatch', () => {
// Activate a UI element communicating that there's been an encryption secret mismatch.
});
Außerdem ist es wichtig, den Benutzern mitzuteilen, dass die Verschlüsselung erfolgreich aktiviert wurde. Ein Subscriber-Objekt sendet ein encryptionSecretMatch-Ereignis, wenn der Subscriber die Medien des Streams nach einer vorherigen Fehlanpassung entschlüsseln kann.
Außerdem ist es wichtig, den Benutzern mitzuteilen, dass die Verschlüsselung erfolgreich aktiviert wurde. Ein Subscriber-Objekt sendet ein encryptionSecretMatch-Ereignis, wenn der Subscriber die Medien des Streams nach einer vorherigen Fehlanpassung entschlüsseln kann.
subscriber.on('encryptionSecretMatch', () => {
// Activate a UI element communicating that the media is being properly decrypted.
});
Die Session.connect() Callback wird mit einem Fehler aufgerufen, wenn der Client versucht, eine Verbindung zu einer Ende-zu-Ende-verschlüsselten Sitzung herzustellen, die mit einem ungültigen Verschlüsselungsgeheimnis initialisiert wurde. Ein gültiges Geheimnis ist eine Zeichenfolge zwischen 8 und 256 Zeichen. Für eine optimale Benutzererfahrung sollte die Anwendung ein ungültiges vom Benutzer bereitgestelltes Geheimnis abfangen, bevor sie den OT.initSession() Methode. Im folgenden Beispiel wird eine Sitzung mit einem leeren (und damit ungültigen) Geheimnis initialisiert, was zu einem Fehler führt, wenn versucht wird, eine Verbindung herzustellen:
const session = OT.initSession(
'api-key',
'e2ee-session-id',
{
encryptionSecret: '',
}
)
session.connect('token', (error) => {
if (error && error.name === 'OT_INVALID_ENCRYPTION_SECRET') {
/*
The application should communicate that the secret was invalid.
*/
}
});
Die Session.connect() Callback wird mit einem Fehler aufgerufen, wenn ein Benutzer versucht, eine Verbindung zu einer Ende-zu-Ende-verschlüsselten Sitzung in einem Browser herzustellen, der keine Ende-zu-Ende-Verschlüsselung unterstützt.
const session = OT.initSession(
'api-key',
'e2ee-session-id',
{
encryptionSecret: 'validEncryptionSecret',
}
)
session.connect('token', (error) => {
if (error && error.name === 'OT_UNSUPPORTED_BROWSER') {
/*
The error will have the message 'Tried to connect an e2ee session but the browser does not support e2ee'
The application should communicate that the browser does not support encryption.
*/
}
});
Wenn ein Benutzer versucht, in einer Ende-zu-Ende-verschlüsselten Sitzung zu veröffentlichen, ohne ein Verschlüsselungsgeheimnis angegeben zu haben, wird die Session.publish() Callback wird mit einem Fehler aufgerufen. Für eine optimale Benutzererfahrung sollte die Anwendung ein vom Benutzer angegebenes Geheimnis validieren, bevor sie die session.publish() Methode:
session.publish(publisher, (error) => {
if (error && error.name === 'OT_STREAM_CREATE_FAILED') {
/*
The error will have the message 'Tried to publish to an e2ee session but encryption secret was not set'
The application should communicate that the secret was not set.
*/
}
});
Wenn ein Benutzer versucht, sich an einer Ende-zu-Ende-verschlüsselten Sitzung zu beteiligen, ohne ein Verschlüsselungsgeheimnis angegeben zu haben, wird die Session.subscribe() Callback wird mit einem Fehler aufgerufen. Für eine optimale Benutzererfahrung sollte die Anwendung ein vom Benutzer angegebenes Geheimnis validieren, bevor sie die Session.subscribe() Methode:
subscriber = session.subscribe(stream, target, opts, (error) => {
if (error && error.name === 'OT_UNABLE_TO_SUBSCRIBE') {
/*
The error will have the message 'Tried to subscribe to an e2ee stream but encryption secret was not set'
The application should communicate that the secret was not set.
*/
}
});