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>
密钥类型
| 类型 | 描述 |
|---|---|
| RSA | RSA密钥(2048、3072、4096位) |
| RSA_HSM | HSM中的RSA密钥 |
| EC | 椭圆曲线密钥 |
| EC_HSM | HSM中的椭圆曲线密钥 |
| OCT | 对称密钥(仅限Managed HSM) |
| OCT_HSM | HSM中的对称密钥 |
客户端创建
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);
最佳实践
- 使用DefaultAzureCredential进行身份验证
- 在Azure托管的应用程序中使用托管标识
- 启用软删除以便恢复
- 使用RBAC进行细粒度访问控制
- 定期轮换密钥以增强安全性
- 为关键密钥启用HSM保护
- 备份重要密钥以防数据丢失
- 在高吞吐量场景中使用异步客户端
局限性
- 仅当任务明确符合上述范围时使用此技能
- 不要将输出视为环境特定验证、测试或专家审查的替代品
- 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清