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 從公開儲存庫中收錄這些內容。

檢舉或申請下架