ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【计算机工具类-安全工具Skills】azure-security-keyvault-keys-java 技能

【计算机工具类-安全工具Skills】azure-security-keyvault-keys-java 技能

Azure Key Vault Keys Java SDK用于加密密钥管理。在创建、管理或使用RSA/EC密钥、执行加密/解密/签名/验证操作或使用HSM支持的密钥时使用。

技能概述

azure-security-keyvault-keys-java 技能提供了在Azure Key Vault和Managed HSM中管理加密密钥和执行加密操作的完整功能。该SDK支持RSA、EC和OCT密钥类型,提供密钥生命周期管理、加密操作和密钥轮换等功能。

下载地址:https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-security-keyvault-keys-java

主要功能

  • 密钥管理: 创建、获取、更新和删除RSA、EC和OCT密钥
  • 加密操作: 加密、解密、包装和解包密钥
  • 签名验证: 对数据进行签名和验证签名
  • 密钥轮换: 自动和手动密钥轮换策略
  • 备份恢复: 备份和恢复密钥
  • HSM支持: 支持硬件安全模块(HSM)保护的密钥
  • 异步客户端: 提供异步API支持

安装

<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-keyvault-keys</artifactId>
<version>4.9.0</version>
</dependency>

密钥类型

类型描述
RSARSA密钥(2048、3072、4096位)
RSA_HSMHSM中的RSA密钥
EC椭圆曲线密钥
EC_HSMHSM中的椭圆曲线密钥
OCT对称密钥(仅限Managed HSM)
OCT_HSMHSM中的对称密钥

客户端创建

import com.azure.security.keyvault.keys.KeyClient;
import com.azure.security.keyvault.keys.KeyClientBuilder;
import com.azure.identity.DefaultAzureCredentialBuilder;

// 密钥管理客户端
KeyClient keyClient = new KeyClientBuilder()
.vaultUrl("https://<vault-name>.vault.azure.net")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();

// 加密客户端
CryptographyClient cryptoClient = new CryptographyClientBuilder()
.keyIdentifier("https://<vault>.vault.azure.net/keys/<key-name>/<version>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();

创建密钥示例

// 创建RSA密钥
KeyVaultKey rsaKey = keyClient.createRsaKey(
new CreateRsaKeyOptions("my-rsa-key")
.setKeySize(2048));

// 创建带选项的RSA密钥
KeyVaultKey rsaKeyWithOptions = keyClient.createRsaKey(
new CreateRsaKeyOptions("my-rsa-key-2")
.setKeySize(4096)
.setExpiresOn(OffsetDateTime.now().plusYears(1))
.setEnabled(true)
.setHardwareProtected(true));

// 创建EC密钥
KeyVaultKey ecKey = keyClient.createEcKey(
new CreateEcKeyOptions("my-ec-key")
.setCurveName(KeyCurveName.P_256));

加密和解密示例

byte[] plaintext = "Hello, World!".getBytes(StandardCharsets.UTF_8);

// 加密
EncryptResult encryptResult = cryptoClient.encrypt(
EncryptionAlgorithm.RSA_OAEP,
plaintext);
byte[] ciphertext = encryptResult.getCipherText();

// 解密
DecryptResult decryptResult = cryptoClient.decrypt(
EncryptionAlgorithm.RSA_OAEP,
ciphertext);
String decrypted = new String(decryptResult.getPlainText(), StandardCharsets.UTF_8);

签名和验证示例

import java.security.MessageDigest;

// 创建数据摘要
byte[] data = "Data to sign".getBytes(StandardCharsets.UTF_8);
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] digest = md.digest(data);

// 签名
SignResult signResult = cryptoClient.sign(SignatureAlgorithm.RS256, digest);
byte[] signature = signResult.getSignature();

// 验证
VerifyResult verifyResult = cryptoClient.verify(
SignatureAlgorithm.RS256,
digest,
signature);

System.out.println("Valid signature: " + verifyResult.isValid());

密钥轮换

// 轮换到新版本
KeyVaultKey rotatedKey = keyClient.rotateKey("my-key");

// 设置轮换策略
KeyRotationPolicy policy = new KeyRotationPolicy()
.setExpiresIn("P90D") // 90天后过期
.setLifetimeActions(Arrays.asList(
new KeyRotationLifetimeAction(KeyRotationPolicyAction.ROTATE)
.setTimeBeforeExpiry("P30D"))); // 过期前30天轮换

keyClient.updateKeyRotationPolicy("my-key", policy);

最佳实践

  1. 使用DefaultAzureCredential进行身份验证
  2. 在Azure托管的应用程序中使用托管标识
  3. 启用软删除以便恢复
  4. 使用RBAC进行细粒度访问控制
  5. 定期轮换密钥以增强安全性
  6. 为关键密钥启用HSM保护
  7. 备份重要密钥以防数据丢失
  8. 在高吞吐量场景中使用异步客户端

局限性

  • 仅当任务明确符合上述范围时使用此技能
  • 不要将输出视为环境特定验证、测试或专家审查的替代品
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进