tm-signer-harness

优质
小牛编辑
138浏览
2023-12-01

Tendermint 远程签名者测试工具促进了 Tendermint 和远程签名者之间的集成测试,比如 KMS。这种远程签名者允许使用HSMs 签署重要的 Tendermint 消息,从而提供额外的安全性。

当执行时, tm-signer-harness

  1. 运行侦听器(TCP或Unix套接字)。
  2. 等待来自远程签名者的连接。
  3. 从远程签名者连接后,执行许多自动化测试以确保兼容性。
  4. 验证成功后,控制流程将以 0 退出码退出。验证失败后,它将使用与错误相关的特定退出码退出。

先决条件

要求与构建 Tendermint 相同的先决条件。

构建

从您的 Tendermint 源代码库中 tools/tm-signer-harness 目录,只需运行:

make

# To have global access to this executable
make install

Docker 镜像

要构建一个包含 tm-signer-harness 的 Docker 镜像,也可以从 Tendermint 源代码库的 tools/tm-signer-harness 目录中找到,只需运行:

make docker-image

针对 KMS 运行

作为如何使用 tm-signer-harness 的示例,下面的说明向您展示了如何针对 KMS 执行它的测试。对于本例,我们将使用KMS中的软件签名模块,因为硬件签名模块需要一个物理设备 YubiHSM

步骤 1: 在本地计算机上安装 KMS

有关如何在本地机器上设置 KMS 的详细信息,请参阅KMS 库

如果您在本地机器上安装了 Rust,您可以通过以下方式安装 KMS:

cargo install tmkms

Step 2: 为 KMS 制作密钥

KMS 软件签名模块需要一个密钥来签署消息。在我们的示例中,我们将简单地从本地 Tendermint 实例导出一个签名密钥。

# Will generate all necessary Tendermint configuration files, including:
# - ~/.tendermint/config/priv_validator_key.json
# - ~/.tendermint/data/priv_validator_state.json
tendermint init

# Extract the signing key from our local Tendermint instance
tm-signer-harness extract_key \      # Use the "extract_key" command
    -tmhome ~/.tendermint \          # Where to find the Tendermint home directory
    -output ./signing.key            # Where to write the key

此外,由于我们希望 KMS 连接到 tm-signer-harness,我们需要从 KMS 侧提供一个秘密连接密钥:

tmkms keygen secret_connection.key

Step 3: 配置并运行 KMS

KMS 需要一些配置来告诉它使用更软的签名模块和 signing.key。我们刚刚生成的密钥文件。将以下内容保存到一个名为 tmkms.toml 的文件中:

[[validator]]
addr = "tcp://127.0.0.1:61219"         # This is where we will find tm-signer-harness.
chain_id = "test-chain-0XwP5E"         # The Tendermint chain ID for which KMS will be signing (found in ~/.tendermint/config/genesis.json).
reconnect = true                       # true is the default
secret_key = "./secret_connection.key" # Where to find our secret connection key.

[[providers.softsign]]
id = "test-chain-0XwP5E"               # The Tendermint chain ID for which KMS will be signing (same as validator.chain_id above).
path = "./signing.key"                 # The signing key we extracted earlier.

然后运行 KMS 与此配置:

tmkms start -c tmkms.toml

这将启动 KMS,它将反复尝试连接到 tcp://127.0.0.1:61219,直到成功为止。

Step 4: 运行 tm-signer-harness

现在我们来运行签名者测试工具:

tm-signer-harness run \             # The "run" command executes the tests
    -addr tcp://127.0.0.1:61219 \   # The address we promised KMS earlier
    -tmhome ~/.tendermint           # Where to find our Tendermint configuration/data files.

如果 Tendermint 和 KMS 的当前版本兼容,tm-signer-harness 现在应该以 0 退出码退出。如果它们不兼容,则应该使用有意义的非零退出码退出(参见下面的退出代码)。

Step 5: 关闭 KMS

只需在 KMS 实例上按 Ctrl+Break (或在Linux中使用 kill 命令)优雅地终止它。

退出码含义

以下列表显示了 tm-signer-harness 中的各种退出码及其含义:

Exit CodeDescription
0成功!
1提供给 tm-signer-harness 的命令行参数无效
2达到的最大接受重试次数(-accept-retries 参数)
3加载 ${TMHOME}/config/genesis.json 失败
4未能创建由 -addr 参数指定的侦听器
5启动监听器失败
6SIGINT 中断 (例如按 Ctrl+Break 或 Ctrl+C)
7其他未知的错误
8测试 1 失败:公钥不匹配
9测试 2 失败:提案签署失败
10测试 3 失败:投票签名失败

最后更新:

类似资料

  • s3-signer s3-signer is intended to be an aid in building secure cloud-based services withAWS. This library generates cryptographically secure URLs thatexpire at a user-defined interval. These URLs can

  • 返回一个 String 类型,表示将对应于 Signature 对象的数码证书附加到文档的人员名字。只读。 expression.Signer expression 必需。该表达式返回“应用于”列表中的对象之一。 示例 本示例提示用户选择 Microsoft Word 中活动文档的数字签名。要使用本示例,请在 Word 中打开文档,并向该函数传递与“数码证书”对话框中数码证书的“颁发者”和“颁发给

  • THIS PACKAGE IS NOT MAINTAINED ANYMORE.SIGNING URLS IS NOW PART OF LARAVEL: https://laravel-news.com/signed-routes Create secured URLs with a limited lifetime in Laravel This package can create URLs w

  • generic-request-signer 是用于标记 http 请求的 Python 库。

  • 我正在DocuSign生产环境中进行测试,遇到了一些奇怪的行为。我们有一个方案,顾问可以亲自主持与客户的签名会议,并在流程结束时签署文档。当面签字人签字和顾问签字后,将有一名最终审查人检查文件并签字(注册负责人)。这一切都很好,除非我们亲自签约,这是第一个签约人在审查时看到的屏幕: 当前结果 在演示中。文档签名。net环境下,此屏幕将显示“顾问名称请让John M Doe控制键盘和鼠标”。以下是从

  • 在使用接口之前,需要先确保正确 引入了 ethers.js 。 钱包(Wallet) 类管理着一个公私钥对用于在以太坊网络上密码签名交易以及所有权证明。 Wallet Wallet 实现了 Signer API ,因此可以在任何需要 签名器(Signer) 的地方使用 Wallet ,它包含了 签名器(Signer) 所有的属性。 创建 Wallet 实例 new Wallet ( private

相关阅读