@aws-crypto/node-jose_aws-kms-extension

中文文档
2.1.0发布于 2024/05/20Apache-2.0TypeScriptCommonJS近 30 天下载 6636

这个库是在 AWS KMS 支持下的节点快取库的扩展

中文使用文档
文档目录10 节
  1. 安装
  2. 使用量
  3. 实例
  4. 从模块@aws-crypto/node-jose aws-kms-extension和@aws-sdk/客户端-kms…
  5. 创建 AWS KMS 客户端
  6. 签名
  7. 加密
  8. 解密
  9. 核查
  10. 许可证

节点- jose aws- kms- 扩展

这个库是扩展 节点夹 库,并使用猴子相扑来扩展节点-jose的能力. 它为基于JWE的加密器/解密器和基于JWS的签名器/验证器提供加密操作,并存储在AWS密钥管理服务(KMS)中.

安装

您可以从 无 使用下列命令。 这个图书馆需要18个或以上的Node.js.

npm install @aws-crypto/node-jose_aws-kms-extension

使用量

从 @aws-crypto/node-jose_aws-kms-extension 模块 :

import {
  KMSAsymmetricSigningKey,
  KMSSymmetricCEK,
  KMSSymmetricKey,
} from '@aws-crypto/node-jose_aws-kms-extension';

导入主jose 对象 .

import { jose } from '@aws-crypto/node-jose_aws-kms-extension';

现在,你可以使用所有现有的节点-快感特性, 和没有这个库时一样。 这个库透明地增加了 AWS KMS 支持 。 您可以使用您的 AWS KMS 密钥进行各种加密和签名操作, 使用常规节点- jose 函数 。 AWS KMS 特定的算法名称被支持.

支助 node-jose 职能包括:

  1. jose.JWE.createEncrypt()
  2. jose.JWE.createDecrypt()
  3. jose.JWS.createSign()
  4. jose.JWS.createVerify()

此库使用 @aws- sdk/ 客户端 - kms 它与AWS KMS的所有通讯.

支持的 KMS 签名算法

支持的 KMS 加密算法

支持的数据密钥光谱

实例

从模块@aws-crypto/node-jose aws-kms-extension和@aws-sdk/客户端-kms导入变量

import {
  jose,
  KMSAsymmetricSigningKey,
  KMSSymmetricCEK,
  KMSSymmetricKey,
} from '@aws-crypto/node-jose_aws-kms-extension';
import { KMSClient } from "@aws-sdk/client-kms";

创建 AWS KMS 客户端

const kmsClient: KMSClient = new KMSClient({ region: 'REGION' });

签名

  1. 准备格式为 compact,以及标题字段.
  2. 将密钥与 KMSA 对称标记关键对象一起编写签名 .
  3. 用乔斯 JWS. 创建签名方法 签署有效载荷.
const signingOpts = {
  format: 'compact',
  fields: {
    alg: 'SIGNING_ALGORITHM',
    kid: 'KMS_SIGNING_KEY_ID',
    JWS_CRIT_HEADER1: 'JWS_CRIT_HEADER1_VALUE',
    JWS_CRIT_HEADER2: 'JWS_CRIT_HEADER2_VALUE',
    crit: ['JWS_CRIT_HEADER1', 'JWS_CRIT_HEADER2'],
  },
};

const signatory = {
  key: new KMSAsymmetricSigningKey('KMS_SIGNING_KEY_ID', kmsClient),
};

const dataToSign = 'This is the data to sign';
const signer = jose.JWS.createSign(signingOpts, signatory);
const jws: Promise<string> = signer
  .update(dataToSign)
  .final()
  .then(function (result: string) {
    console.log('JWS: ', result);
    return result;
  });

加密

  1. 编写格式为 compact,标题字段和 cek 作为 KMSS对称CEK 对象.
  2. 将加密收件人编制为 false键。 使用相同的 KMS 密钥创建 KMSS对称CEK 和 KMSS对称Key .
  3. 使用乔斯。 JWE.创建加密jws有效载荷的方法.
const encryptionOpts = {
  format: 'compact',
  fields: {
    kid: 'ENCRYPTION_KMS_KEY_ID',
    alg: 'KEY_ENCRYPTION_ALGORITHM',
    enc: 'CONTENT_ENCRYPTION_ALGORITHM',
    JWE_CRIT_HEADER1: 'JWE_CRIT_HEADER1_VALUE',
    JWE_CRIT_HEADER2: 'JWE_CRIT_HEADER2_VALUE',
    crit: ['JWE_CRIT_HEADER1', 'JWE_CRIT_HEADER2'],
  },
  cek: new KMSSymmetricCEK('KMS_ENCRYPTION_KEY_ID', kmsClient, 'KEY_SPEC'),
};

const encryptionRecipient = {
  reference: false,
  key: new KMSSymmetricKey('KMS_ENCRYPTION_KEY_ID', kmsClient),
};

const encrypter = jose.JWE.createEncrypt(
  encryptionOpts,
  encryptionRecipient,
);
const jwe: Promise<string> = jws.then(function (jws: string) {
  return encrypter
    .update(jws)
    .final()
    .then(function (result: string) {
      console.log('JWE: ', result);
      return result;
    });
});

解密

  1. 与处理器一起准备解密选项来处理jwe关键头.
  2. 预解密被假定为 KMSS 对称Key 对象
  3. 用乔斯 JWE.创建解密jwe有效载荷的方法.
const decryption_opts = {
  handlers: {
    JWE_CRIT_HEADER1: function(jwe: any) {
      console.log(jwe.header.JWE_CRIT_HEADER1)
      // process JWE_CRIT_HEADER1
    },
    JWE_CRIT_HEADER2: function(jwe: any) {
      console.log(jwe.header.JWE_CRIT_HEADER2)
      // process JWE_CRIT_HEADER2
    }
  },
};

const decryption_assumedKey = new KMSSymmetricKey(
  'KMS_ENCRYPTION_KEY_ID',
  kmsClient,
);

const decrypter = jose.JWE.createDecrypt(
  decryption_assumedKey,
  decryption_opts,
);

const decyptedContent: Promise<any> = jwe.then(function (jwe: string) {
  return decrypter.decrypt(jwe).then(function (result: any) {
    console.log('JWE decryption result: ', result);
    return result;
  });
});

核查

  1. 与处理器一起编写验证选项,处理jws关键头.
  2. 准备假想的 KMSA 对称签名关键对象的校验
  3. 用乔斯 JWS.创建验证jws有效载荷的方法.
const verification_opts = {
  handlers: {
    JWS_CRIT_HEADER1: function(jws: any) {
      console.log(jws.header.JWS_CRIT_HEADER1)
      // process JWS_CRIT_HEADER1
    },
    JWS_CRIT_HEADER2: function(jws: any) {
      console.log(jws.header.JWS_CRIT_HEADER2)
      // process JWS_CRIT_HEADER2
    }
  },
};

const verificationAssumedKey = new KMSAsymmetricSigningKey(
  'KMS_SIGNING_KEY_ID',
  kmsClient,
);

const verifier = jose.JWS.createVerify(
  verificationAssumedKey,
  verification_opts,
);
const verificationResult: Promise<any> = decyptedContent.then(function (
  decryptedContent: any,
) {
  const payloadToVerify = jose.util.utf8.encode(decryptedContent.payload);
  return verifier.verify(payloadToVerify).then(function (result: any) {
    console.log('JWS verification result: ', result);
    console.log('Verified payload: ', jose.util.utf8.encode(result.payload));
    return result;
  });
});

注:KMS SIGNING KEY ID和KMS ENCRYPTION KEY ID可以是KMS密钥ID,密钥ARN,别名,或别名ARN. 当使用别名时, 它会有前缀 alias/。应在不同的亚马逊网络服务账户中指定关键ARN或别名ARN.

警卫

见 捐款 更多信息.

许可证

该图书馆在以下 Apache 许可证,2.0版本, (中文(简体) ), 见 自由主义 财务报告和审定财务报表 通知 更多信息.

版本与发布记录

@aws-crypto/node-jose_aws-kms-extension 共发布 4 个版本,首次发布于 2023/09/30;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.1.0latest2024/05/202 年前
2.0.22023/11/073 年前
2.0.12023/10/123 年前
2.0.02023/09/303 年前

关于 @aws-crypto/node-jose_aws-kms-extension 的常见问题

@aws-crypto/node-jose_aws-kms-extension 是什么?

这个库是在 AWS KMS 支持下的节点快取库的扩展

如何安装 @aws-crypto/node-jose_aws-kms-extension?

在项目目录运行 npm install @aws-crypto/node-jose_aws-kms-extension,或使用 pnpm add / yarn add / bun add。

@aws-crypto/node-jose_aws-kms-extension 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws-crypto/node-jose_aws-kms-extension 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@aws-crypto/node-jose_aws-kms-extension 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@aws-crypto/node-jose_aws-kms-extension 可以商用吗?

@aws-crypto/node-jose_aws-kms-extension 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aws-crypto/node-jose_aws-kms-extension 的下载量有多少?

根据 npm 官方下载统计,@aws-crypto/node-jose_aws-kms-extension 在 2026/10/08 – 2026/11/06 这 30 天内被下载 6,636 次,日均约 221 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws-crypto/node-jose_aws-kms-extension 还在维护吗?

最新版本 2.1.0 发布于 2024/05/20(2 年前);至今共发布 4 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/09/30。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。