Important Notes
- Dans OpenTok.js 2.27.0+, le chiffrement de bout en bout ne fonctionnera pas lors de la connexion à des clients utilisant une version antérieure d'OpenTok.js. Lorsque vous mettez à jour votre application pour utiliser OpenTok.js 2.27.0+, assurez-vous que tous les clients utilisent OpenTok.js 2.27.0+ si l'application utilise le chiffrement de bout en bout.
- La prise en charge du chiffrement de bout en bout sur les navigateurs basés sur WebKit, par exemple Safari sur macOS/iOS et Chrome sur iOS, n'est disponible qu'à partir de la version OpenTok.js 2.30.0.
Note about Content Security Policies (CSP)
Si le script-src est définie, assurez-vous que 'wasm-unsafe-eval' est spécifié. Dans le cas contraire, le chargement et l'exécution de WebAssembly, nécessaire pour le cryptage de bout en bout, sont bloqués sur la page.
Initializing a session with a secret
Les sessions cryptées de bout en bout sont créées à l'aide des API du serveur (voir Activation du cryptage à l'aide de l'option API REST). Pour qu'un client web rejoigne une session chiffrée de bout en bout, spécifiez un secret de chiffrement lors de l'appel de la fonction OT.initSession() méthode :
const session = OT.initSession('api-key', 'session-id', {
encryptionSecret: 'initialEncryptionSecret',
});
Un secret valide est une chaîne de 8 à 256 caractères. Le secret peut être modifié ultérieurement à l'aide de la commande Session.setEncryptionSecret() (voir Changer la méthode secretci-dessous).
Checking whether the browser supports end-to-end encryption
Utiliser le OT.hasEndToEndEncryptionSupport() pour vérifier si le navigateur du client prend en charge le cryptage de bout en bout :
if (OT.hasEndToEndEncryptionSupport()) {
// Proceed with connecting to the session
}
else {
// Notify the user that they cannot join the session
}
Le cryptage de bout en bout n'est actuellement pas pris en charge par Firefox.
Changing the secret
Vous pouvez modifier le secret à l'aide de la fonction Session.setEncryptionSecret() après la connexion de la session :
await session.setEncryptionSecret('newEncryptionSecret');
Events and errors
Les événements et les erreurs sont essentiels pour gérer le comportement du chiffrement piloté par l'utilisateur. Le chiffrement de bout en bout utilise le modèle du secret partagé : tous les participants à la session sont censés utiliser le même secret pour chiffrer leurs données et déchiffrer celles des autres.
Un objet Abonné envoie un encryptionSecretMismatch lorsque l'abonné n'est pas en mesure de décoder les médias d'un flux. Il est important de communiquer à l'utilisateur que le média n'est pas reçu en raison d'une erreur de cryptage et non en raison d'une défaillance de connexion ou d'un bug audio/vidéo :
subscriber.on('encryptionSecretMismatch', () => {
// Activate a UI element communicating that there's been an encryption secret mismatch.
});
Il est également important de communiquer aux utilisateurs que le cryptage a été activé avec succès. Un objet Subscriber envoie un événement encryptionSecretMatch lorsque l'abonné est en mesure de décoder le média du flux après une erreur précédente.
Il est également important de communiquer aux utilisateurs que le cryptage a été activé avec succès. Un objet Subscriber envoie un événement encryptionSecretMatch lorsque l'abonné est en mesure de décoder le média du flux après une erreur précédente.
subscriber.on('encryptionSecretMatch', () => {
// Activate a UI element communicating that the media is being properly decrypted.
});
Les Session.connect() est invoqué avec une erreur si le client tente de se connecter à une session chiffrée de bout en bout qui a été initialisée avec un secret de chiffrement non valide. Un secret valide est une chaîne de 8 à 256 caractères. Pour une meilleure expérience utilisateur, l'application doit détecter un secret invalide fourni par l'utilisateur avant d'appeler la fonction OT.initSession() méthode. Dans l'exemple suivant, une session est initialisée avec un secret vide (et donc invalide), ce qui provoque une erreur lors de la tentative de connexion :
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.
*/
}
});
Les Session.connect() est invoqué avec une erreur si un utilisateur tente de se connecter à une session chiffrée de bout en bout dans un navigateur qui ne prend pas en charge le chiffrement de bout en bout.
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.
*/
}
});
Si un utilisateur tente de publier dans une session cryptée de bout en bout sans avoir spécifié de secret de cryptage, la fonction Session.publish() est invoqué avec une erreur. Pour une meilleure expérience utilisateur, l'application devrait valider un secret fourni par l'utilisateur avant d'appeler la fonction session.publish() méthode :
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.
*/
}
});
Si un utilisateur tente de s'abonner à une session cryptée de bout en bout sans avoir spécifié de secret de cryptage, l'application Session.subscribe() est invoqué avec une erreur. Pour une meilleure expérience utilisateur, l'application devrait valider un secret fourni par l'utilisateur avant d'appeler la fonction Session.subscribe() méthode :
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.
*/
}
});