Невозможно использовать модуль @google-cloud/kms nodejs для расшифровки секрета
Код:
contents = encryptedWebhookSecret[0].toString();
console.log(typeof contents);
console.log(contents);
const formattedName = kmsClient.cryptoKeyPath(PROJECT, 'global', KEYRING, KEY);
const kmsDecryptRequest = {
name: formattedName,
ciphertext: contents //encryptedWebhookSecret
};
console.log("Decrypting webhook secret...");
return kmsClient.decrypt(kmsDecryptRequest);
encryptedWebhookSecret является результатом операции download() с использованием клиента @google-cloud/storage. это возвращает [Buffer], который я приводил к строке. Я записываю зашифрованную строку, ее значение верное. Я могу скачать зашифрованный секрет, используя gsutil
из командной строки и gcloud kms decrypt
работает отлично.
Кажется, эта ошибка говорит о том, что строка неправильно закодирована (не должно быть utf8?).
Значения для PROJECT, KEYRING и KEY дважды и трижды проверены и являются правильными.
Ошибка:
ERROR: Error: invalid encoding at Error (native) at Object.decode (/user_code/node_modules/@google-cloud/kms/node_modules/@protobufjs/base64/index.js:105:19) at Type.DecryptRequest$fromObject [as fromObject] (eval at Codegen (/user_code/node_modules/@google-cloud/kms/node_modules/@protobufjs/codegen/index.js:50:33), <anonymous>:12:15) at Type.fromObject (/user_code/node_modules/@google-cloud/kms/node_modules/protobufjs/src/type.js:538:25) at serialize (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/protobuf_js_6_common.js:70:23) at Object.final_requester.sendMessage (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:802:37) at InterceptingCall._callNext (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:418:43) at InterceptingCall.sendMessage (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:460:8) at InterceptingCall._callNext (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:424:12) at InterceptingCall.sendMessage (/user_code/node_modules/@google-cloud/kms/node_modules/grpc/src/client_interceptors.js:460:8)
РЕДАКТИРОВАТЬ: Когда я пытаюсь использовать кодировку base64, я получаю "TypeError: Ключ должен быть буфером в TypeError (native) в новом Hmac (crypto.js:93:16) в Object.Hmac (crypto.js:91:12) в isRequestValid (/user_code/index.js:81:8) в decryptWebhookSecret.then (/user_code/index.js:119:21)".
2 ответа
Проблема заключалась в том, что ciphertext
должен быть в кодировке base64.
Клиентская библиотека Node требует, чтобы незашифрованные и зашифрованные тексты передавались как буферы. Что достаточно просто - ты просто сделаешь ciphertext: Buffer.from(contents)
в вашем примере выше.