Google 云存储似乎忽略了客户提供的加密密钥 Headers
Google Cloud Storage Appears to Ignore Customer Supplied Encryption Key Headers
我正在开展一个将图像存储在 Google 云存储 (GCS) 中的项目。我是 运行 具有以下代码的 NodeJS 服务器。文件被发送到带有签名 URL 的服务器,以便在 GCS 中恢复上传。抛光整个文件后,服务器将请求定向到该地址。
这部分有效。但是,当我将 headers 添加到指定 customer-supplied encryption key 的请求时,GCS 会忽略它们。上传完成,returns一个200
,并应用默认加密密钥。
当我尝试 x-goog-encryption-algorithm
的无效值时,我 应该 得到 400
,它上传正常。
我应该非常接近,但是我缺少什么 header 或配置允许指定 customer-supplied 加密密钥?
var crypto = require("crypto");
var fs = require("fs");
var Request = require("request");
var hashKey = function(key) {
var hash = crypto.createHash("sha256");
key = new Buffer(key);
hash.update(key);
return hash.digest("base64");
};
var GCS = module.exports = function GCS(env) {
// config contains the encryption key I'd like to specify.
this.config = env.config
};
GCS.prototype.upload = function (url, buffer) {
var self = this;
return new Promise(function(resolve, reject) {
var headers = {
"Content-Length": buffer.size,
"x-goog-encryption-algorithm": "AES256",
"x-goog-encryption-key": self.config.encryption.key,
"x-goog-encryption-key-sha256": hashKey(self.config.encryption.key)
};
var options = {
url: url,
method: "PUT",
headers: headers
};
fs.createReadStream(buffer.path)
.pipe(Request(options))
.on("error", function(e) {
self.logger.error("Failed to upload asset to slot.", e);
reject(e);
})
.on("response", function(res){
if (res.statusCode != 200) {
reject(new Error("Unexpected response code" + res));
}
resolve(res);
});
});
};
对于可续传上传,您需要发送与创建上传 URL.
的初始 POST 相同的加密 headers
我正在开展一个将图像存储在 Google 云存储 (GCS) 中的项目。我是 运行 具有以下代码的 NodeJS 服务器。文件被发送到带有签名 URL 的服务器,以便在 GCS 中恢复上传。抛光整个文件后,服务器将请求定向到该地址。
这部分有效。但是,当我将 headers 添加到指定 customer-supplied encryption key 的请求时,GCS 会忽略它们。上传完成,returns一个200
,并应用默认加密密钥。
当我尝试 x-goog-encryption-algorithm
的无效值时,我 应该 得到 400
,它上传正常。
我应该非常接近,但是我缺少什么 header 或配置允许指定 customer-supplied 加密密钥?
var crypto = require("crypto");
var fs = require("fs");
var Request = require("request");
var hashKey = function(key) {
var hash = crypto.createHash("sha256");
key = new Buffer(key);
hash.update(key);
return hash.digest("base64");
};
var GCS = module.exports = function GCS(env) {
// config contains the encryption key I'd like to specify.
this.config = env.config
};
GCS.prototype.upload = function (url, buffer) {
var self = this;
return new Promise(function(resolve, reject) {
var headers = {
"Content-Length": buffer.size,
"x-goog-encryption-algorithm": "AES256",
"x-goog-encryption-key": self.config.encryption.key,
"x-goog-encryption-key-sha256": hashKey(self.config.encryption.key)
};
var options = {
url: url,
method: "PUT",
headers: headers
};
fs.createReadStream(buffer.path)
.pipe(Request(options))
.on("error", function(e) {
self.logger.error("Failed to upload asset to slot.", e);
reject(e);
})
.on("response", function(res){
if (res.statusCode != 200) {
reject(new Error("Unexpected response code" + res));
}
resolve(res);
});
});
};
对于可续传上传,您需要发送与创建上传 URL.
的初始 POST 相同的加密 headers