Используйте Vault для хранения клиентов PEM и KEY для последующего использования с fetch - PullRequest
0 голосов
/ 28 сентября 2019

Я хочу хранить клиенты PEM / KEY (PFX) для последующего использования.Я хочу, чтобы пользователь, который загружал свои сертификаты на мой сервер, был единственным, кто может получить к нему доступ при входе в систему.

Затем сертификаты используются для совершения звонка поставщику платежей.Сервер может загружать только новый сертификат и добавлять «роль», которая является единственным пользователем, который может получить к нему доступ.Сервер также может удалять сертификаты.

Пробное хранилище ключей Azure и Hashicorp Vault, но безуспешно, вероятно потому, что я еще не нашел информацию, необходимую для выполнения этой работы

Это моетекущий рабочий код, но необходимо добавить поддержку сертификатов и ключей для входа в систему.

const payment = bodyData => {
  return new Promise((resolve, reject) => {
    fetch("https://mss.cpc.getswish.net/swish-cpcapi/api/v1/paymentrequests", {
      agent: new https.Agent({
        ca: fs.readFileSync(path.join(__dirname, "cert/Swish_TLS_RootCA.pem")),
        // pfx: fs.readFileSync(path.join(__dirname, "cert/no.pfx")),
        cert: fs.readFileSync(
          path.join(
            __dirname,
            "cert/Swish_Merchant_TestCertificate_1231181189.pem"
          )
        ),
        key: fs.readFileSync(
          path.join(
            __dirname,
            "cert/Swish_Merchant_TestCertificate_1231181189.key"
          )
        ),
        passphrase: "swish"
      }),
      method: "POST",
      body: JSON.stringify(bodyData),
      headers: { "Content-Type": "application/json" }
    })
      .then(res => {
        if (res.status === 201) {
          const location = res.headers.get("location");
          if (location !== null) {
            resolve(location.split("/").slice(-1)[0]);
          } else {
            reject(new Error("Unable to find 'location' parmas in header!"));
          }
        } else {
          return res.json()
        }
      }).then(reject)
      .catch(reject);
  });
};
...