2 votes

Comment s'assurer qu'un fichier est crypté avec SSE-C avant de le télécharger depuis Amazon S3 ?

J'utilise Amazon aws Java SDK pour le codage.

J'ai téléchargé quelques-uns de mes fichiers locaux vers S3 en utilisant SSE-C (cryptage côté serveur utilisant la clé fournie par le client) et quelques fichiers sans utiliser de cryptage. Avant de télécharger un fichier dans un autre module, je dois m'assurer que ce fichier particulier est crypté ou non. Je me suis référé à ce qui suit lien . Mais cette procédure concerne les fichiers chiffrés avec SSE (qui est différent de SSE-C). Après avoir consulté les API Java d'Amazon aws, j'ai écrit le code ci-dessous.

Base64 b = new Base64();
byte[] keyBytes = b.decode("encryptionKey");
SecretKey key = new SecretKeySpec(keyBytes,0,keyBytes.length,"AES");
SSECustomerKey sseKey = new SSECustomerKey(key);

GetObjectMetadataRequest request2 =new GetObjectMetadataRequest("bucketname","keyname").withSSECustomerKey(sseKey);
ObjectMetadata metadata = s3client.getObjectMetadata(request2);
System.out.println("Encryption algorithm used: " + metadata.getSSECustomerAlgorithm());

Le morceau de code ci-dessus fonctionne bien pour télécharger un fichier crypté. Mais il donne une exception lors du téléchargement d'un fichier qui n'est pas crypté.

Existe-t-il une API commune pour obtenir les métadonnées des fichiers cryptés et non cryptés ?

1voto

Frédéric Henri Points 32002

Vous pouvez exécuter la vérification avant, et si getSSECustomerKey retourne null, vous savez qu'il n'a pas été crypté, quelque chose comme

GetObjectMetadataRequest request2 = new GetObjectMetadataRequest("bucketname","keyname");
ObjectMetadata metadata = s3client.getObjectMetadata(request2);

if (metadata.getSSEAlgorithm() == null) {
    // download files directly - it is not encrypted
} else {
    // files encrypted - add the SSE key
}

L'autre option est de vérifier l'exception et de traiter le téléchargement d'un fichier non crypté comme une exception, de vérifier si le fichier existe et de procéder au téléchargement.

1voto

Brian Armstrong Points 358

Le conseil général lors de l'utilisation de SSE-C est de stocker séparément une correspondance entre les objets S3 et la clé de cryptage utilisée (pas la clé elle-même cependant). Cette correspondance peut être stockée dans une base de données (RDS, Dynamo, voire SimpleDB). Il peut également être stocké dans S3 : stockez un fichier dans un chemin d'accès tel que .../metadata/<object> qui contient l'ID de la clé ou "NONE", et le lire avant d'essayer d'obtenir le fichier réel.

L'une des raisons de procéder de cette manière est de prendre en charge plusieurs clés client. Vous pouvez avoir besoin de passer progressivement d'une clé à une autre en raison d'une politique de rotation des clés, ou décider d'utiliser une clé différente pour chacun de vos clients. De cette façon, votre application est prête à prendre en charge n'importe lequel de ces scénarios.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X