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.
Add this skill
npx mdskills install sickn33/azure-security-keyvault-keys-javaComprehensive Azure Key Vault cryptographic operations reference with excellent code examples
1---2name: azure-security-keyvault-keys-java3description: 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.4package: com.azure:azure-security-keyvault-keys5---67# Azure Key Vault Keys (Java)89Manage cryptographic keys and perform cryptographic operations in Azure Key Vault and Managed HSM.1011## Installation1213```xml14<dependency>15 <groupId>com.azure</groupId>16 <artifactId>azure-security-keyvault-keys</artifactId>17 <version>4.9.0</version>18</dependency>19```2021## Client Creation2223```java24import com.azure.security.keyvault.keys.KeyClient;25import com.azure.security.keyvault.keys.KeyClientBuilder;26import com.azure.security.keyvault.keys.cryptography.CryptographyClient;27import com.azure.security.keyvault.keys.cryptography.CryptographyClientBuilder;28import com.azure.identity.DefaultAzureCredentialBuilder;2930// Key management client31KeyClient keyClient = new KeyClientBuilder()32 .vaultUrl("https://<vault-name>.vault.azure.net")33 .credential(new DefaultAzureCredentialBuilder().build())34 .buildClient();3536// Async client37KeyAsyncClient keyAsyncClient = new KeyClientBuilder()38 .vaultUrl("https://<vault-name>.vault.azure.net")39 .credential(new DefaultAzureCredentialBuilder().build())40 .buildAsyncClient();4142// Cryptography client (for encrypt/decrypt/sign/verify)43CryptographyClient cryptoClient = new CryptographyClientBuilder()44 .keyIdentifier("https://<vault-name>.vault.azure.net/keys/<key-name>/<key-version>")45 .credential(new DefaultAzureCredentialBuilder().build())46 .buildClient();47```4849## Key Types5051| Type | Description |52|------|-------------|53| `RSA` | RSA key (2048, 3072, 4096 bits) |54| `RSA_HSM` | RSA key in HSM |55| `EC` | Elliptic Curve key |56| `EC_HSM` | Elliptic Curve key in HSM |57| `OCT` | Symmetric key (Managed HSM only) |58| `OCT_HSM` | Symmetric key in HSM |5960## Create Keys6162### Create RSA Key6364```java65import com.azure.security.keyvault.keys.models.*;6667// Simple RSA key68KeyVaultKey rsaKey = keyClient.createRsaKey(new CreateRsaKeyOptions("my-rsa-key")69 .setKeySize(2048));7071System.out.println("Key name: " + rsaKey.getName());72System.out.println("Key ID: " + rsaKey.getId());73System.out.println("Key type: " + rsaKey.getKeyType());7475// RSA key with options76KeyVaultKey rsaKeyWithOptions = keyClient.createRsaKey(new CreateRsaKeyOptions("my-rsa-key-2")77 .setKeySize(4096)78 .setExpiresOn(OffsetDateTime.now().plusYears(1))79 .setNotBefore(OffsetDateTime.now())80 .setEnabled(true)81 .setKeyOperations(KeyOperation.ENCRYPT, KeyOperation.DECRYPT,82 KeyOperation.WRAP_KEY, KeyOperation.UNWRAP_KEY)83 .setTags(Map.of("environment", "production")));8485// HSM-backed RSA key86KeyVaultKey hsmKey = keyClient.createRsaKey(new CreateRsaKeyOptions("my-hsm-key")87 .setKeySize(2048)88 .setHardwareProtected(true));89```9091### Create EC Key9293```java94// EC key with P-256 curve95KeyVaultKey ecKey = keyClient.createEcKey(new CreateEcKeyOptions("my-ec-key")96 .setCurveName(KeyCurveName.P_256));9798// EC key with other curves99KeyVaultKey ecKey384 = keyClient.createEcKey(new CreateEcKeyOptions("my-ec-key-384")100 .setCurveName(KeyCurveName.P_384));101102KeyVaultKey ecKey521 = keyClient.createEcKey(new CreateEcKeyOptions("my-ec-key-521")103 .setCurveName(KeyCurveName.P_521));104105// HSM-backed EC key106KeyVaultKey ecHsmKey = keyClient.createEcKey(new CreateEcKeyOptions("my-ec-hsm-key")107 .setCurveName(KeyCurveName.P_256)108 .setHardwareProtected(true));109```110111### Create Symmetric Key (Managed HSM only)112113```java114KeyVaultKey octKey = keyClient.createOctKey(new CreateOctKeyOptions("my-symmetric-key")115 .setKeySize(256)116 .setHardwareProtected(true));117```118119## Get Key120121```java122// Get latest version123KeyVaultKey key = keyClient.getKey("my-key");124125// Get specific version126KeyVaultKey keyVersion = keyClient.getKey("my-key", "<version-id>");127128// Get only key properties (no key material)129KeyProperties keyProps = keyClient.getKey("my-key").getProperties();130```131132## Update Key Properties133134```java135KeyVaultKey key = keyClient.getKey("my-key");136137// Update properties138key.getProperties()139 .setEnabled(false)140 .setExpiresOn(OffsetDateTime.now().plusMonths(6))141 .setTags(Map.of("status", "archived"));142143KeyVaultKey updatedKey = keyClient.updateKeyProperties(key.getProperties(),144 KeyOperation.ENCRYPT, KeyOperation.DECRYPT);145```146147## List Keys148149```java150import com.azure.core.util.paging.PagedIterable;151152// List all keys153for (KeyProperties keyProps : keyClient.listPropertiesOfKeys()) {154 System.out.println("Key: " + keyProps.getName());155 System.out.println(" Enabled: " + keyProps.isEnabled());156 System.out.println(" Created: " + keyProps.getCreatedOn());157}158159// List key versions160for (KeyProperties version : keyClient.listPropertiesOfKeyVersions("my-key")) {161 System.out.println("Version: " + version.getVersion());162 System.out.println("Created: " + version.getCreatedOn());163}164```165166## Delete Key167168```java169import com.azure.core.util.polling.SyncPoller;170171// Begin delete (soft-delete enabled vaults)172SyncPoller<DeletedKey, Void> deletePoller = keyClient.beginDeleteKey("my-key");173174// Wait for deletion175DeletedKey deletedKey = deletePoller.poll().getValue();176System.out.println("Deleted: " + deletedKey.getDeletedOn());177178deletePoller.waitForCompletion();179180// Purge deleted key (permanent deletion)181keyClient.purgeDeletedKey("my-key");182183// Recover deleted key184SyncPoller<KeyVaultKey, Void> recoverPoller = keyClient.beginRecoverDeletedKey("my-key");185recoverPoller.waitForCompletion();186```187188## Cryptographic Operations189190### Encrypt/Decrypt191192```java193import com.azure.security.keyvault.keys.cryptography.models.*;194195CryptographyClient cryptoClient = new CryptographyClientBuilder()196 .keyIdentifier("https://<vault>.vault.azure.net/keys/<key-name>")197 .credential(new DefaultAzureCredentialBuilder().build())198 .buildClient();199200byte[] plaintext = "Hello, World!".getBytes(StandardCharsets.UTF_8);201202// Encrypt203EncryptResult encryptResult = cryptoClient.encrypt(EncryptionAlgorithm.RSA_OAEP, plaintext);204byte[] ciphertext = encryptResult.getCipherText();205System.out.println("Ciphertext length: " + ciphertext.length);206207// Decrypt208DecryptResult decryptResult = cryptoClient.decrypt(EncryptionAlgorithm.RSA_OAEP, ciphertext);209String decrypted = new String(decryptResult.getPlainText(), StandardCharsets.UTF_8);210System.out.println("Decrypted: " + decrypted);211```212213### Sign/Verify214215```java216import java.security.MessageDigest;217218// Create digest of data219byte[] data = "Data to sign".getBytes(StandardCharsets.UTF_8);220MessageDigest md = MessageDigest.getInstance("SHA-256");221byte[] digest = md.digest(data);222223// Sign224SignResult signResult = cryptoClient.sign(SignatureAlgorithm.RS256, digest);225byte[] signature = signResult.getSignature();226227// Verify228VerifyResult verifyResult = cryptoClient.verify(SignatureAlgorithm.RS256, digest, signature);229System.out.println("Valid signature: " + verifyResult.isValid());230```231232### Wrap/Unwrap Key233234```java235// Key to wrap (e.g., AES key)236byte[] keyToWrap = new byte[32]; // 256-bit key237new SecureRandom().nextBytes(keyToWrap);238239// Wrap240WrapResult wrapResult = cryptoClient.wrapKey(KeyWrapAlgorithm.RSA_OAEP, keyToWrap);241byte[] wrappedKey = wrapResult.getEncryptedKey();242243// Unwrap244UnwrapResult unwrapResult = cryptoClient.unwrapKey(KeyWrapAlgorithm.RSA_OAEP, wrappedKey);245byte[] unwrappedKey = unwrapResult.getKey();246```247248## Backup and Restore249250```java251// Backup252byte[] backup = keyClient.backupKey("my-key");253254// Save backup to file255Files.write(Paths.get("key-backup.blob"), backup);256257// Restore258byte[] backupData = Files.readAllBytes(Paths.get("key-backup.blob"));259KeyVaultKey restoredKey = keyClient.restoreKeyBackup(backupData);260```261262## Key Rotation263264```java265// Rotate to new version266KeyVaultKey rotatedKey = keyClient.rotateKey("my-key");267System.out.println("New version: " + rotatedKey.getProperties().getVersion());268269// Set rotation policy270KeyRotationPolicy policy = new KeyRotationPolicy()271 .setExpiresIn("P90D") // Expire after 90 days272 .setLifetimeActions(Arrays.asList(273 new KeyRotationLifetimeAction(KeyRotationPolicyAction.ROTATE)274 .setTimeBeforeExpiry("P30D"))); // Rotate 30 days before expiry275276keyClient.updateKeyRotationPolicy("my-key", policy);277278// Get rotation policy279KeyRotationPolicy currentPolicy = keyClient.getKeyRotationPolicy("my-key");280```281282## Import Key283284```java285import com.azure.security.keyvault.keys.models.ImportKeyOptions;286import com.azure.security.keyvault.keys.models.JsonWebKey;287288// Import existing key material289JsonWebKey jsonWebKey = new JsonWebKey()290 .setKeyType(KeyType.RSA)291 .setN(modulus)292 .setE(exponent)293 .setD(privateExponent)294 // ... other RSA components295 ;296297ImportKeyOptions importOptions = new ImportKeyOptions("imported-key", jsonWebKey)298 .setHardwareProtected(false);299300KeyVaultKey importedKey = keyClient.importKey(importOptions);301```302303## Encryption Algorithms304305| Algorithm | Key Type | Description |306|-----------|----------|-------------|307| `RSA1_5` | RSA | RSAES-PKCS1-v1_5 |308| `RSA_OAEP` | RSA | RSAES with OAEP (recommended) |309| `RSA_OAEP_256` | RSA | RSAES with OAEP using SHA-256 |310| `A128GCM` | OCT | AES-GCM 128-bit |311| `A256GCM` | OCT | AES-GCM 256-bit |312| `A128CBC` | OCT | AES-CBC 128-bit |313| `A256CBC` | OCT | AES-CBC 256-bit |314315## Signature Algorithms316317| Algorithm | Key Type | Hash |318|-----------|----------|------|319| `RS256` | RSA | SHA-256 |320| `RS384` | RSA | SHA-384 |321| `RS512` | RSA | SHA-512 |322| `PS256` | RSA | SHA-256 (PSS) |323| `ES256` | EC P-256 | SHA-256 |324| `ES384` | EC P-384 | SHA-384 |325| `ES512` | EC P-521 | SHA-512 |326327## Error Handling328329```java330import com.azure.core.exception.HttpResponseException;331import com.azure.core.exception.ResourceNotFoundException;332333try {334 KeyVaultKey key = keyClient.getKey("non-existent-key");335} catch (ResourceNotFoundException e) {336 System.out.println("Key not found: " + e.getMessage());337} catch (HttpResponseException e) {338 System.out.println("HTTP error " + e.getResponse().getStatusCode());339 System.out.println("Message: " + e.getMessage());340}341```342343## Environment Variables344345```bash346AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net347```348349## Best Practices3503511. **Use HSM Keys for Production** - Set `setHardwareProtected(true)` for sensitive keys3522. **Enable Soft Delete** - Protects against accidental deletion3533. **Key Rotation** - Set up automatic rotation policies3544. **Least Privilege** - Use separate keys for different operations3555. **Local Crypto When Possible** - Use `CryptographyClient` with local key material to reduce round-trips356357## Trigger Phrases358359- "Key Vault keys Java", "cryptographic keys Java"360- "encrypt decrypt Java", "sign verify Java"361- "RSA key", "EC key", "HSM key"362- "key rotation", "wrap unwrap key"363
Full transparency — inspect the skill content before installing.