невозможно использовать модуль @ google-cloud / kms nodejs для расшифровки секрета - PullRequest
0 голосов
/ 03 октября 2018

Код:

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 ]

0 голосов
/ 03 октября 2018

Проблема заключалась в том, что ciphertext должен быть закодирован в base64.

0 голосов
/ 03 октября 2018

Клиентская библиотека Node требует, чтобы незашифрованные и зашифрованные тексты передавались как буферы.Что достаточно просто - вы просто сделаете ciphertext: Buffer.from(contents) в вашем примере выше.

...