Невозможно использовать модуль @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) в вашем примере выше.

Другие вопросы по тегам