Azure Security Keyvault Keys Java

作者 microsoft354361d83247MIT收录于 2026年10月8日更新于 2026年10月8日

Azure Key Vault Keys Java SDK for cryptographic key management. Use when creating, managing, or using RSA/EC keys, performing encrypt/decrypt/sign/verify operations, or working with HSM-backed keys.

精选仅含说明Security
AI 生成的概览

指导 Java 开发者管理 Azure Key Vault 加密密钥,并执行加密、解密、签名和验证操作。

功能
说明如何使用 Azure Key Vault Keys Java SDK 创建、获取、更新、列出、删除、备份、还原、导入和轮换 RSA、EC 及对称密钥,包括 HSM 支持的密钥。展示 KeyClient、KeyAsyncClient 和 CryptographyClient 的客户端配置,以及加密解密、签名验证和密钥包装解包的代码。还列出密钥类型、加密与签名算法、错误处理、环境变量和最佳实践。
适用场景
适用于编写在 Azure Key Vault 或 Managed HSM 中管理密钥的 Java 代码,或通过 Key Vault Keys SDK 执行加密操作的场景。也适合设置密钥轮换策略、导入现有密钥材料或选择合适的加密与签名算法。不适用于非 Azure 的密钥管理或一般应用开发。
运行要求
需要 Java 环境以及 com.azure:azure-security-keyvault-keys Maven 依赖、Azure 身份库、Azure Key Vault 或 Managed HSM 的保管库 URL,以及 DefaultAzureCredential 或托管标识等 Azure 凭据。需要访问 Azure 的网络。不附带脚本,仅为说明文档。

Azure Key Vault Keys (Java)

Manage cryptographic keys and perform cryptographic operations in Azure Key Vault and Managed HSM.

Installation

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

Client Creation

java
import com.azure.core.credential.TokenCredential;import com.azure.identity.AzureIdentityEnvVars;import com.azure.identity.DefaultAzureCredentialBuilder;import com.azure.identity.ManagedIdentityCredentialBuilder;import com.azure.security.keyvault.keys.KeyClient;import com.azure.security.keyvault.keys.KeyClientBuilder;import com.azure.security.keyvault.keys.cryptography.CryptographyClient;import com.azure.security.keyvault.keys.cryptography.CryptographyClientBuilder;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>TokenCredential credential = new DefaultAzureCredentialBuilder()    .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)    .build();// Or use a specific credential directly in production:// See https://learn.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#credential-classes// TokenCredential credential = new ManagedIdentityCredentialBuilder().build();
// Key management clientKeyClient keyClient = new KeyClientBuilder()    .vaultUrl("https://<vault-name>.vault.azure.net")    .credential(credential)    .buildClient();
// Async clientKeyAsyncClient keyAsyncClient = new KeyClientBuilder()    .vaultUrl("https://<vault-name>.vault.azure.net")    .credential(credential)    .buildAsyncClient();
// Cryptography client (for encrypt/decrypt/sign/verify)CryptographyClient cryptoClient = new CryptographyClientBuilder()    .keyIdentifier("https://<vault-name>.vault.azure.net/keys/<key-name>/<key-version>")    .credential(credential)    .buildClient();

Key Types

TypeDescription
RSARSA key (2048, 3072, 4096 bits)
RSA_HSMRSA key in HSM
ECElliptic Curve key
EC_HSMElliptic Curve key in HSM
OCTSymmetric key (Managed HSM only)
OCT_HSMSymmetric key in HSM

Create Keys

Create RSA Key

java
import com.azure.security.keyvault.keys.models.*;
// Simple RSA keyKeyVaultKey rsaKey = keyClient.createRsaKey(new CreateRsaKeyOptions("my-rsa-key")    .setKeySize(2048));
System.out.println("Key name: " + rsaKey.getName());System.out.println("Key ID: " + rsaKey.getId());System.out.println("Key type: " + rsaKey.getKeyType());
// RSA key with optionsKeyVaultKey rsaKeyWithOptions = keyClient.createRsaKey(new CreateRsaKeyOptions("my-rsa-key-2")    .setKeySize(4096)    .setExpiresOn(OffsetDateTime.now().plusYears(1))    .setNotBefore(OffsetDateTime.now())    .setEnabled(true)    .setKeyOperations(KeyOperation.ENCRYPT, KeyOperation.DECRYPT,                        KeyOperation.WRAP_KEY, KeyOperation.UNWRAP_KEY)    .setTags(Map.of("environment", "production")));
// HSM-backed RSA keyKeyVaultKey hsmKey = keyClient.createRsaKey(new CreateRsaKeyOptions("my-hsm-key")    .setKeySize(2048)    .setHardwareProtected(true));

Create EC Key

java
// EC key with P-256 curveKeyVaultKey ecKey = keyClient.createEcKey(new CreateEcKeyOptions("my-ec-key")    .setCurveName(KeyCurveName.P_256));
// EC key with other curvesKeyVaultKey ecKey384 = keyClient.createEcKey(new CreateEcKeyOptions("my-ec-key-384")    .setCurveName(KeyCurveName.P_384));
KeyVaultKey ecKey521 = keyClient.createEcKey(new CreateEcKeyOptions("my-ec-key-521")    .setCurveName(KeyCurveName.P_521));
// HSM-backed EC keyKeyVaultKey ecHsmKey = keyClient.createEcKey(new CreateEcKeyOptions("my-ec-hsm-key")    .setCurveName(KeyCurveName.P_256)    .setHardwareProtected(true));

Create Symmetric Key (Managed HSM only)

java
KeyVaultKey octKey = keyClient.createOctKey(new CreateOctKeyOptions("my-symmetric-key")    .setKeySize(256)    .setHardwareProtected(true));

Get Key

java
// Get latest versionKeyVaultKey key = keyClient.getKey("my-key");
// Get specific versionKeyVaultKey keyVersion = keyClient.getKey("my-key", "<version-id>");
// Get only key properties (no key material)KeyProperties keyProps = keyClient.getKey("my-key").getProperties();

Update Key Properties

java
KeyVaultKey key = keyClient.getKey("my-key");
// Update propertieskey.getProperties()    .setEnabled(false)    .setExpiresOn(OffsetDateTime.now().plusMonths(6))    .setTags(Map.of("status", "archived"));
KeyVaultKey updatedKey = keyClient.updateKeyProperties(key.getProperties(),    KeyOperation.ENCRYPT, KeyOperation.DECRYPT);

List Keys

java
import com.azure.core.util.paging.PagedIterable;
// List all keysfor (KeyProperties keyProps : keyClient.listPropertiesOfKeys()) {    System.out.println("Key: " + keyProps.getName());    System.out.println("  Enabled: " + keyProps.isEnabled());    System.out.println("  Created: " + keyProps.getCreatedOn());}
// List key versionsfor (KeyProperties version : keyClient.listPropertiesOfKeyVersions("my-key")) {    System.out.println("Version: " + version.getVersion());    System.out.println("Created: " + version.getCreatedOn());}

Delete Key

java
import com.azure.core.util.polling.SyncPoller;
// Begin delete (soft-delete enabled vaults)SyncPoller<DeletedKey, Void> deletePoller = keyClient.beginDeleteKey("my-key");
// Wait for deletionDeletedKey deletedKey = deletePoller.poll().getValue();System.out.println("Deleted: " + deletedKey.getDeletedOn());
deletePoller.waitForCompletion();
// Purge deleted key (permanent deletion)keyClient.purgeDeletedKey("my-key");
// Recover deleted keySyncPoller<KeyVaultKey, Void> recoverPoller = keyClient.beginRecoverDeletedKey("my-key");recoverPoller.waitForCompletion();

Cryptographic Operations

Encrypt/Decrypt

java
import com.azure.security.keyvault.keys.cryptography.models.*;
CryptographyClient cryptoClient = new CryptographyClientBuilder()    .keyIdentifier("https://<vault>.vault.azure.net/keys/<key-name>")    .credential(new DefaultAzureCredentialBuilder().build())    .buildClient();
byte[] plaintext = "Hello, World!".getBytes(StandardCharsets.UTF_8);
// EncryptEncryptResult encryptResult = cryptoClient.encrypt(EncryptionAlgorithm.RSA_OAEP, plaintext);byte[] ciphertext = encryptResult.getCipherText();System.out.println("Ciphertext length: " + ciphertext.length);
// DecryptDecryptResult decryptResult = cryptoClient.decrypt(EncryptionAlgorithm.RSA_OAEP, ciphertext);String decrypted = new String(decryptResult.getPlainText(), StandardCharsets.UTF_8);System.out.println("Decrypted: " + decrypted);

Sign/Verify

java
import java.security.MessageDigest;
// Create digest of databyte[] data = "Data to sign".getBytes(StandardCharsets.UTF_8);MessageDigest md = MessageDigest.getInstance("SHA-256");byte[] digest = md.digest(data);
// SignSignResult signResult = cryptoClient.sign(SignatureAlgorithm.RS256, digest);byte[] signature = signResult.getSignature();
// VerifyVerifyResult verifyResult = cryptoClient.verify(SignatureAlgorithm.RS256, digest, signature);System.out.println("Valid signature: " + verifyResult.isValid());

Wrap/Unwrap Key

java
// Key to wrap (e.g., AES key)byte[] keyToWrap = new byte[32];  // 256-bit keynew SecureRandom().nextBytes(keyToWrap);
// WrapWrapResult wrapResult = cryptoClient.wrapKey(KeyWrapAlgorithm.RSA_OAEP, keyToWrap);byte[] wrappedKey = wrapResult.getEncryptedKey();
// UnwrapUnwrapResult unwrapResult = cryptoClient.unwrapKey(KeyWrapAlgorithm.RSA_OAEP, wrappedKey);byte[] unwrappedKey = unwrapResult.getKey();

Backup and Restore

java
// Backupbyte[] backup = keyClient.backupKey("my-key");
// Save backup to fileFiles.write(Paths.get("key-backup.blob"), backup);
// Restorebyte[] backupData = Files.readAllBytes(Paths.get("key-backup.blob"));KeyVaultKey restoredKey = keyClient.restoreKeyBackup(backupData);

Key Rotation

java
// Rotate to new versionKeyVaultKey rotatedKey = keyClient.rotateKey("my-key");System.out.println("New version: " + rotatedKey.getProperties().getVersion());
// Set rotation policyKeyRotationPolicy policy = new KeyRotationPolicy()    .setExpiresIn("P90D")  // Expire after 90 days    .setLifetimeActions(Arrays.asList(        new KeyRotationLifetimeAction(KeyRotationPolicyAction.ROTATE)            .setTimeBeforeExpiry("P30D")));  // Rotate 30 days before expiry
keyClient.updateKeyRotationPolicy("my-key", policy);
// Get rotation policyKeyRotationPolicy currentPolicy = keyClient.getKeyRotationPolicy("my-key");

Import Key

java
import com.azure.security.keyvault.keys.models.ImportKeyOptions;import com.azure.security.keyvault.keys.models.JsonWebKey;
// Import existing key materialJsonWebKey jsonWebKey = new JsonWebKey()    .setKeyType(KeyType.RSA)    .setN(modulus)    .setE(exponent)    .setD(privateExponent)    // ... other RSA components    ;
ImportKeyOptions importOptions = new ImportKeyOptions("imported-key", jsonWebKey)    .setHardwareProtected(false);
KeyVaultKey importedKey = keyClient.importKey(importOptions);

Encryption Algorithms

AlgorithmKey TypeDescription
RSA1_5RSARSAES-PKCS1-v1_5
RSA_OAEPRSARSAES with OAEP (recommended)
RSA_OAEP_256RSARSAES with OAEP using SHA-256
A128GCMOCTAES-GCM 128-bit
A256GCMOCTAES-GCM 256-bit
A128CBCOCTAES-CBC 128-bit
A256CBCOCTAES-CBC 256-bit

Signature Algorithms

AlgorithmKey TypeHash
RS256RSASHA-256
RS384RSASHA-384
RS512RSASHA-512
PS256RSASHA-256 (PSS)
ES256EC P-256SHA-256
ES384EC P-384SHA-384
ES512EC P-521SHA-512

Error Handling

java
import com.azure.core.exception.HttpResponseException;import com.azure.core.exception.ResourceNotFoundException;
try {    KeyVaultKey key = keyClient.getKey("non-existent-key");} catch (ResourceNotFoundException e) {    System.out.println("Key not found: " + e.getMessage());} catch (HttpResponseException e) {    System.out.println("HTTP error " + e.getResponse().getStatusCode());    System.out.println("Message: " + e.getMessage());}

Environment Variables

bash
AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net  # Required for vault URLAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production

Best Practices

  1. Use HSM Keys for Production - Set setHardwareProtected(true) for sensitive keys
  2. Enable Soft Delete - Protects against accidental deletion
  3. Key Rotation - Set up automatic rotation policies
  4. Least Privilege - Use separate keys for different operations
  5. Local Crypto When Possible - Use CryptographyClient with local key material to reduce round-trips

Trigger Phrases

  • "Key Vault keys Java", "cryptographic keys Java"
  • "encrypt decrypt Java", "sign verify Java"
  • "RSA key", "EC key", "HSM key"
  • "key rotation", "wrap unwrap key"

来源与署名

来源:microsoft/skills位于.github/plugins/azure-sdk-java/skills/azure-security-keyvault-keys-java提交354361d

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架