1. 概览
Cloud KMS 是一项云托管式密钥管理服务,让您能够使用与本地部署时相同的方式为云服务管理加密密钥。它支持使用各种密钥类型和来源(包括用于硬件支持的密钥的 Cloud HSM)进行加密、解密、签名和验证。本教程介绍如何使用非对称 Cloud KMS 密钥对数据进行签名和验证。
您将学到
- 如何启用 Cloud KMS API
- 如何创建密钥环
- 如何创建用于非对称签名/验证的加密密钥
2. 设置和要求
自定进度的环境设置
请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID
。
- 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。
运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分中的所有说明操作,该部分介绍了如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
启动 Cloud Shell
在此 Codelab 中,您将使用 Cloud Shell,它是在 Google Cloud 上运行的免费虚拟化环境。在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。除非另有说明,否则请从此 Shell 运行所有命令。
3. 启用 Cloud KMS 服务
您必须先在项目中启用 Cloud KMS,然后才能使用该服务。此操作只需要针对每个项目执行一次。如需启用 Cloud KMS 服务,请运行以下命令:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
最多可能需要一分钟才能启用。该命令在完成后会报告成功。
4. 创建 KMS 密钥
创建 Cloud KMS 密钥环。在 Cloud KMS 中,密钥环是加密密钥的逻辑集合。密钥环包含有关密钥的元数据,例如其位置。在 global
区域中创建一个名为 my-keyring
的密钥环:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
现在,在您刚刚创建的密钥环中创建一个名为 my-asymmetric-signing-key
且用途为 asymmetric-signing
的 CryptoKey。
$ gcloud kms keys create "my-asymmetric-signing-key" \ --location "global" \ --keyring "my-keyring" \ --purpose "asymmetric-signing" \ --default-algorithm "rsa-sign-pkcs1-4096-sha512"
5. 标志数据
与加密不同,解密使用非对称 Cloud KMS 密钥加密的数据确实需要在线访问 Cloud KMS 服务。使用 gcloud
命令行工具对文件中的密文进行解密:
创建包含要签名的数据的文件,然后使用 gcloud
命令行工具使用 Cloud KMS 密钥对数据进行签名:
$ echo "my-contents" > ./data.txt
$ gcloud kms asymmetric-sign \ --location "global" \ --keyring "my-keyring" \ --key "my-asymmetric-signing-key" \ --version "1" \ --digest-algorithm "sha512" \ --input-file ./data.txt \ --signature-file ./data.txt.sig
签名会保存在磁盘上的 data.txt.sig
中。如果您打开 data.txt.sig
文件,会发现其中包含奇怪的不可打印字符。这是因为生成的数据采用二进制格式。
将签名存储在数据库中或将其作为 HTTP 请求的一部分传输时,您可能需要对数据进行编码。常见的编码机制是 base64。
6. 验证数据
对于非对称密钥,Cloud KMS 不会直接执行验证。而是提供对公钥的访问权限,您可以通过公钥加密使用该公钥验证数据。使用非对称密钥时,验证可以完全离线完成,无需访问 Cloud KMS 或任何其他 Google Cloud API。验证是使用 openssl
等加密工具或支持公钥加密的编程语言或库执行的。
从 Cloud KMS 下载公钥:
$ gcloud kms keys versions get-public-key "1" \ --location "global" \ --keyring "my-keyring" \ --key "my-asymmetric-signing-key" \ --output-file ./key.pub
使用 openssl
命令行工具对比公钥验证签名:
$ openssl dgst -sha256 \ -verify ./key.pub \ -signature ./data.txt.sig ./data.txt
控制台会输出一条成功消息,指明数字签名有效。
Verified OK
7. 恭喜!
您已启用 Cloud KMS API、创建了非对称签名密钥,并对数据进行了签名和验证!Cloud KMS 是一款功能强大的产品,签名/验证只是其众多功能中的一小部分。
清理
如果您已完成探索,请考虑删除您的项目。
- 前往 Cloud Platform 控制台
- 选择要关停的项目,然后点击顶部的“删除”。这会安排删除该项目。
了解详情
许可
此作品已获得 Creative Commons Attribution 2.0 通用许可授权。