Cryptage des archives
Le cryptage vidéo de Vonage vous permet de créer des archives dans lesquelles les données ne sont jamais au repos dans un état non crypté.
Vous pouvez sécuriser vos archives de la manière suivante :
- Désactiver le stockage de secours des archives - Par défaut, Vonage stocke un fichier d'archive sur ses serveurs s'il n'a pas pu télécharger le fichier sur le serveur Amazon S3 ou Microsoft Azure que vous avez spécifié. Vous pouvez empêcher ce stockage de secours en utilisant l'API REST pour définir la cible de téléchargement des archives.
- Utilisez le cryptage vidéo de Vonage - Cela vous permet de créer des archives où les données ne sont jamais au repos sans être cryptées. Il s'agit du niveau de sécurité le plus élevé.
- Utiliser le chiffrement côté serveur Amazon S3 - Cette option utilise des clés de chiffrement gérées par Amazon S3 pour le chiffrement. Pour plus d'informations, voir ce guide du développeur.
Avec le cryptage vidéo de Vonage, les données vidéo et audio d'une archive Vonage sont cryptées à l'aide d'un certificat de clé publique que vous fournissez à Vonage.
Important : La fonction de cryptage de Vonage est disponible en tant qu'option. fonction complémentaire. Contactez nous pour activer cette fonction pour les clés de votre projet.
Aperçu des fonctionnalités
La fonction d'archivage crypté de la plateforme vidéo de Vonage vous permet de créer des archives où les données ne sont jamais au repos dans un état non crypté.
Tout d'abord, créez une paire de clés RSA publique et privée à utiliser avec vos archives. À l'aide d'un appel API REST, vous partagez le certificat de clé publique avec Vonage. (Dans le même appel REST, vous envoyez des détails sur la cible de téléchargement Amazon S3 ou Microsoft Azure à utiliser pour vos archives.
La fonction d'archivage crypté nécessite la définition d'une cible de téléchargement). Vous enregistrez la clé privée localement pour votre usage privé uniquement.
Vonage crypte ensuite chaque archive à l'aide d'un mot de passe généré au hasard, le crypte avec le certificat et stocke le mot de passe crypté dans nos serveurs.
Lorsque l'archive est prête, vous en êtes informé par un rappel sur votre serveur et vous pouvez demander le mot de passe. Vonage ne stocke à aucun moment le mot de passe non crypté, et Vonage n'a aucun moyen de décrypter le mot de passe (seul le détenteur de la clé privée peut décrypter le mot de passe).
Vous pouvez ensuite décrypter le mot de passe à l'aide de la clé privée et utiliser le mot de passe pour décrypter l'archive cryptée. Le fichier d'archive décrypté est au format MPEG-TS.
Vonage utilise l'algorithme AES-256 pour crypter l'archive.
Le mot de passe généré est crypté à l'aide d'un cryptage RSA avec un remplissage OAEP. Notez que vous ne pouvez utiliser l'archivage crypté qu'avec des archives composées, et non avec des archives de flux individuelles.
Dans ce guide, nous examinerons les points suivants :
Création d'un certificat d'archivage crypté
Envoi du certificat d'archivage crypté à Vonage
Désactivation de l'archivage crypté
Création d'un certificat d'archivage crypté
Créez un certificat X.509 PEM et une clé privée correspondante à utiliser avec vos archives :
(Note : Ceci a été testé avec OpenSSL 1.0.1).
Vous enverrez le certificat à Vonage, qui l'utilisera pour générer un mot de passe crypté, nécessaire pour décrypter l'archive. Le mot de passe peut être décrypté avec votre clé privée, et l'archive peut être décryptée avec le mot de passe. Le mot de passe sera différent pour chaque archive.
La taille de la clé doit être de 2048 bits ou moins. Vous enverrez le certificat dans des données JSON à l'API Video REST de Vonage pour définir la cible d'archivage (voir la section suivante). Puisque le certificat sera inclus dans les données JSON, envoyez les données encodées en base64 ou remplacez les caractères de nouvelle ligne dans le certificat par "\n".
L'exemple suivant encode le certificat en base64 :
Une chaîne de certificat codée en base64 ressemble à ceci :
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
Une chaîne de certificat dont les caractères de retour à la ligne ont été remplacés se présente comme suit :
"-----BEGIN CERTIFICATE-----\n...\n...\n -----END CERTIFICATE-----"
Envoi du certificat d'archivage crypté à Vonage
Pour définir le certificat et activer le cryptage des archives, envoyez une requête HTTP PUT à l'URL suivante :
/v2/project/archive/storage
Remplacer appId avec l'identifiant de votre projet.
Authentifier la demande d'API REST à l'aide de l'option En-tête d'autorisation:
Authorization: Basic base64(APP_ID:API_SECRET)
Créez le jeton web JSON avec les revendications suivantes :
{
"iss": "your_app_id",
"ist": "project",
"iat": current_timestamp_in_seconds,
"exp": expire_timestamp_in_seconds,
"jti": "jwt_nonce"
}
- Set (jeu de mots)
issà votre identifiant In-App Video (qui vous a été fourni lors de votre inscription sur le site Web de Vonage). Account Vonage sur la page du projet). - Set (jeu de mots)
istà "projet". - Set (jeu de mots)
iatà l'horodatage Unix actuel (date de création du jeton), en secondes. - Set (jeu de mots)
expà l'heure d'expiration du jeton. Pour des raisons de sécurité, nous vous recommandons d'utiliser un délai d'expiration proche du délai de création du jeton (par exemple, 3 minutes après la création) et de créer un nouveau jeton pour chaque appel à l'API REST. Le délai d'expiration maximal autorisé est de 5 minutes. - Set (jeu de mots)
jtià un identifiant unique pour le JWT. Cet identifiant est facultatif. Voir la page Spécification du jeton web JSON pour plus de détails.
Utilisez la clé privée de votre projet comme clé secrète JWT et signez-la avec l'algorithme de cryptage HMAC-SHA256. (Votre clé privée vous est fournie sur votre Video API Account sur la page Projet). Par exemple, le code Python suivant crée un jeton qui peut être utilisé dans un appel à l'API REST :
import jwt # See https://pypi.python.org/pypi/PyJWT
import time
import uuid
print jwt.encode({"iss": "my-project-API-key",
"iat": int(time.time()),
"exp": int(time.time()) + 180,
"ist": "project",
"jti": str(uuid.uuid4())()},
'my-project-API-secret',
algorithm='RS256')
Remplacer my-project-API-key et my-project-API-secret avec l'identifiant et le secret de l'application du projet In-App Video de Vonage.
Définir le Content-type pour l'appel de l'API REST à application/json:
Content-Type:application/json
Remplacer les caractères de fin de ligne du certificat par des caractères de fin de ligne. "\n"afin que vous puissiez l'utiliser dans la chaîne littérale des données JSON. Transmettez le certificat de clé publique en tant que propriété des données JSON que vous envoyez lorsque vous appelez la méthode REST pour définir le stockage d'archives. Voir les sections suivantes.
Configuration de l'archivage crypté pour une cible Amazon S3
Pour spécifier un certificat de clé publique à utiliser avec une cible Amazon S3, définissez les données JSON dans l'appel API REST en utilisant le format suivant :
{
"type": "s3",
"config": {
"bucket": "example.com.archive-bucket",
"secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
"accessKey": "AWFS7BAO536E6MXA"
},
"fallback": "none",
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
}
Set (jeu de mots) bucket au nom de l'espace de stockage Amazon S3 que vous souhaitez utiliser pour le téléchargement des archives. Définissez le champ secretKey et accessKey à la clé secrète et à la clé d'accès Amazon S3 pour ce seau.
Définir la propriété fallback à "none" pour éviter que les fichiers d'archive soient stockés dans le nuage vidéo de Vonage si le téléchargement échoue. Définissez la propriété sur "opentok" pour que l'archive soit disponible sur votre tableau de bord si le téléchargement échoue.
Définissez la propriété du certificat sur le certificat de clé publique que Vonage utilisera pour crypter l'archive. Veillez à encoder le certificat en base64 ou à remplacer les caractères de retour à la ligne dans le certificat par des caractères "\n"afin de pouvoir l'utiliser dans la chaîne littérale des données JSON.
Configuration de l'archivage crypté pour une cible Microsoft Azure
Pour spécifier un certificat de clé publique à utiliser avec une cible Microsoft Azure, définissez les données JSON dans l'appel API REST en utilisant le format suivant :
{
"type": "azure",
"config": {
"accountName":"myAccountname",
"accountKey":"myAccountKey",
"container": "containerName"
},
"fallback": "none",
"certificate" : "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0...
}
Définissez le conteneur pour qu'il corresponde au nom de votre conteneur Microsoft Azure. Définissez le accountName et accountKey pour correspondre à vos identifiants de stockage Microsoft Azure.
Régler le fallback à la propriété "none" pour éviter que les fichiers d'archive soient stockés dans le nuage vidéo de Vonage si le téléchargement échoue. Définissez la propriété sur "opentok" pour que l'archive soit disponible sur le tableau de bord en cas d'échec du téléchargement.
Régler le certificate au certificat de clé publique que Vonage utilisera pour crypter l'archive. Veillez à encoder le certificat en base64 ou à remplacer les caractères de retour à la ligne dans le certificat par des caractères "\n"afin que vous puissiez l'utiliser dans la chaîne littérale des données JSON. Une chaîne de certificat encodée en base64 ressemble à ceci :
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
Réponses de l'API REST
- Une réponse avec le code d'état 200 indique un succès.
- Une réponse avec un code d'état 400 indique que vous avez inclus des données JSON non valides ou que vous n'avez pas spécifié la cible de téléchargement.
- Une réponse avec un code d'état 403 indique que vous avez transmis un identifiant d'application de projet ou une clé privée non valide.
Exemples
L'exemple de ligne de commande suivant définit de manière sécurisée le certificat que Vonage doit utiliser pour crypter les archives à télécharger dans un bac Amazon S3 :
Définir la valeur de app_id à votre ID d'application du projet Vonage Video.
Définissez les valeurs pour your-s3-bucket et your-s3-access-key pour qu'il corresponde à vos identifiants Amazon S3. Remplacez la valeur du certificat par la chaîne du certificat.
L'exemple de ligne de commande suivant définit de manière sécurisée le certificat que Vonage doit utiliser pour crypter les archives à télécharger dans un panier Microsoft Azure :
Définir la valeur de app_id à votre ID d'application du projet Vonage Video.
Définissez les valeurs pour your-azure-account-name, your-azure-account-nameet your-azure-container pour qu'il corresponde à vos identifiants Amazon S3. Remplacez la valeur du certificat par la chaîne du certificat.
Décryptage d'une archive
Vous pouvez définir un rappel de l'état de l'archive à l'aide du tableau de bord. Voir "Modifications de l'état des archives" dans la section Guide du développeur pour l'archivage.
Une fois l'archive créée, les requêtes POST relatives à l'état de l'archive envoyées à votre URL de rappel incluent une propriété de mot de passe :
{
"id" : "b40ef09b-3811-4726-b508-e41a0f96c68f",
"event": "archive",
"createdAt" : 1384221380000,
"duration" : 328,
"name" : "Foo",
"partnerId" : 123456,
"reason" : "",
"sessionId" : "2_MX40NzIwMzJ-flR1ZSBPERUIDIwMTN-MC45NDQ2MzE2NH4",
"size" : 18023312,
"status" : "uploaded",
"password" : "e42c...d23"
}
Le mot de passe est une clé AES cryptée par certificat et un vecteur d'initialisation, sous la forme de données binaires codées en base64.
Les trois premiers octets des données binaires représentent la version (un octet), l'algorithme (un octet) et le mode (un octet). Dans cette version, la longueur est fixée à 1, l'algorithme est fixé à 1 (indiquant AES-256) et le mode est fixé à 1 (indiquant CBC).
Les 32 octets suivants constituent la clé. Les 16 octets restants sont le vecteur d'initialisation.
Il faut d'abord décoder le mot de passe, puis le décrypter à l'aide de la clé privée :
Utilisez ensuite le mot de passe pour décrypter le fichier d'archive :
-K est la clé
-iv est le vecteur d'initialisation
xxd transforme le mot de passe décodé et décrypté en hexadécimal afin qu'il puisse être transmis à openssl. Lisez la page de manuel xxd pour plus d'informations sur les commutateurs.
Désactivation de l'archivage crypté
Pour désactiver l'archivage crypté, envoyez une requête HTTP PUT à l'URL de stockage des archives (voir Envoi du certificat d'archivage crypté à Vonage), mais attribuez la valeur null au certificat dans les données JSON que vous envoyez avec la demande.
Désactiver l'archivage crypté pour une cible Amazon S3
Pour supprimer un certificat de clé publique pour une cible d'archivage Amazon S3 (et supprimer le chiffrement des archives), appelez l'API REST avec les données JSON suivantes :
{
"type": "s3",
"config": {
"bucket": "example.com.archive-bucket",
"secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
"accessKey": "AWFS7BAO536E6MXA"
},
"fallback": "none",
"certificate" : null
}
Set (jeu de mots) bucket au nom de l'espace de stockage Amazon S3 que vous souhaitez utiliser pour le téléchargement des archives.
Définissez le champ secretKey et accessKey à la clé secrète et à la clé d'accès Amazon S3 pour ce seau.
Définissez les propriétés fallback propriété to "none" pour éviter que les fichiers d'archive ne soient stockés dans le nuage de Vonage si le téléchargement échoue.
Définissez la propriété à "opentok" pour que l'archive soit disponible sur le tableau de bord de Vonage si le téléchargement échoue.
Définissez le paramètre certificate à null.
Désactiver l'archivage crypté pour une cible Microsoft Azure
Pour supprimer un certificat de clé publique pour une cible d'archivage Microsoft Azure (et supprimer le chiffrement des archives), appelez l'API REST avec les données JSON suivantes :
{
"type": "azure",
"config": {
"accountName":"myAccountname",
"accountKey":"myAccountKey",
"container": "containerName"
},
"certificate" : null
}
Set (jeu de mots) container pour qu'il corresponde au nom de votre conteneur Microsoft Azure.
Définissez le accountName et accountKey pour qu'elles correspondent à vos identifiants de stockage Microsoft Azure.
Définissez les fallback à la propriété "none" pour éviter que les fichiers d'archive ne soient stockés dans le nuage de Vonage si le téléchargement échoue.
Définissez la propriété à "opentok" pour que l'archive soit disponible sur le tableau de bord de Vonage si le téléchargement échoue.
Définissez le paramètre certificate à la propriété null.
Réponses de l'API REST
- Une réponse avec le code d'état 200 indique que la désactivation du chiffrement a été effectuée avec succès.
- Une réponse avec un code d'état 400 indique que vous avez inclus des données JSON non valides ou que vous n'avez pas spécifié la cible de téléchargement.
- Une réponse avec un code d'état 403 indique que vous avez transmis un identifiant de projet ou un secret de partenaire non valide.
Exemple
L'exemple de ligne de commande suivant désactive l'archivage crypté pour une cible S3 :
Définir la valeur de app_id à l'identifiant de votre In-App Video.
Définissez les valeurs pour your-s3-bucket et your-s3-access-key pour correspondre à vos identifiants Amazon S3.
Problèmes connus
La durée d'une archive cryptée est toujours indiquée comme étant égale à 0, dans tous les appels de l'API REST de Vonage Video, dans les méthodes des SDK de serveur de Vonage Video et dans les rappels de changement d'état de l'archive.