開始使用 Java 的 Azure Key Vault 憑證用戶端函式庫。 請遵循下列步驟來安裝套件,並試用基本工作的程式碼範例。
Tip
如果您在您的Spring應用程式中使用Azure Key Vault 證書資源,我們建議您考慮 Spring Cloud Azure 作為替代方案。 Spring Cloud Azure 是一個開源專案,提供與 Azure 服務無縫整合的 Spring。 想了解更多關於 Spring Cloud Azure 的資訊,並觀看使用 金鑰保存庫 憑證的範例,請參考 Enable HTTPS in Spring Boot with Azure Key Vault certificates。
其他資源:
Prerequisites
- Azure訂閱 - 免費創建。
- Java 開發套件(JDK)版本 8 或更高版本
- Apache Maven
- Azure CLI
這個快速入門假設你在 Linux 終端機視窗中執行
設定
這個快速入門是使用 Azure Identity 函式庫搭配 Azure CLI 來驗證使用者到 Azure 服務。 開發者也可使用Visual Studio或Visual Studio Code來驗證通話,更多資訊請參見 Authenticate the client with Azure Identity client library。
登入 Azure
執行
login命令。az login如果 CLI 能開啟你的預設瀏覽器,它會這麼做並載入 Azure 登入頁面。
否則,請在 https://aka.ms/devicelogin 中開啟瀏覽器頁面,並輸入顯示在終端機中的授權碼。
請在瀏覽器中使用您的帳戶認證登入。
建立一個新的 Java 控制台應用程式
在主控台視窗中,使用 mvn 指令建立一個名為 akv-certificates-java 的新Java主控台應用程式。
mvn archetype:generate -DgroupId=com.keyvault.certificates.quickstart
-DartifactId=akv-certificates-java
-DarchetypeArtifactId=maven-archetype-quickstart
-DarchetypeVersion=1.4
-DinteractiveMode=false
產生專案的輸出會顯示如下:
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: packageInPathFormat, Value: com/keyvault/quickstart
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/user/quickstarts/akv-certificates-java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 38.124 s
[INFO] Finished at: 2019-11-15T13:19:06-08:00
[INFO] ------------------------------------------------------------------------
將目錄變更為新建立的 akv-certificates-java/ 資料夾。
cd akv-certificates-java
安裝套件
在文字編輯器中開啟 pom.xml 檔案。 將下列相依性元素新增至相依性群組。
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-keyvault-certificates</artifactId>
<version>4.8.6</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.18.2</version>
</dependency>
建立資源群組和金鑰保存庫
這個快速入門使用預先建立的 Azure 金鑰庫。 您可以遵循下列快速入門中的步驟來建立金鑰保存庫:
或者,你也可以執行這些 Azure CLI 指令。
Important
每個金鑰保存庫必須有唯一的名稱。 在以下範例中,請用你的金鑰保險庫名稱替換 <vault-name>。
az group create --name "myResourceGroup" -l "EastUS"
az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true
授與對金鑰保存庫的存取權
要透過
az role assignment create --role "Key Vault Certificates Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
將<upn>、<subscription-id>和<vault-name>取代為您的實際值。 如果你用了不同的資源群組名稱,也請把「myResourceGroup」替換掉。 您 UPN 的格式通會是電子郵件地址 (例如,username@domain.com)。
設定環境變數
此應用程式使用您的金鑰保存庫名稱作為名為 KEY_VAULT_NAME 的環境變數。
Windows
set KEY_VAULT_NAME=<vault-name>
Windows PowerShell
$Env:KEY_VAULT_NAME="<vault-name>"
macOS 或 Linux
export KEY_VAULT_NAME=<vault-name>
物件模型
Java 的 Azure Key Vault 憑證用戶端函式庫允許你管理憑證。 程式碼範例一節說明如何建立用戶端、建立憑證、擷取憑證及刪除憑證。
整個主控台應用程式如下。
程式碼範例
新增指示詞
將下列指示詞新增至程式碼頂端:
import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;
驗證並建立用戶端
大多數 Azure 服務的應用程式請求必須獲得授權。 建議使用 DefaultAzureCredential 來實作程式碼中無需密碼連接Azure服務的方法。
DefaultAzureCredential 支援多個驗證方法,並在執行階段判斷應該使用哪個方法。 此方法可讓您的應用程式在不同的環境中 (本機或實際執行環境) 使用不同的驗證方法,而不需要實作環境特有的程式碼。
在這個快速入門中,DefaultAzureCredential 會利用登入 Azure CLI 的本地開發使用者的憑證來驗證金鑰庫。 當應用程式部署到 Azure 時,相同的 DefaultAzureCredential 程式碼可以自動發現並使用分配給應用程式服務、虛擬機器或其他服務的管理身份。 如需詳細資訊,請參閱受控識別概觀。
在此範例中,金鑰保存庫的名稱會以 https://<vault-name>.vault.azure.net 格式,擴充至金鑰保存庫 URI。 如需對金鑰保存庫進行驗證的詳細資訊,請參閱開發人員指南。
String keyVaultName = System.getenv("KEY_VAULT_NAME");
String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";
CertificateClient certificateClient = new CertificateClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
儲存憑證
現在應用程式已通過驗證,您可以使用 certificateClient.beginCreateCertificate 方法在金鑰保存庫中建立憑證。 這需要憑證名稱與憑證政策——本範例中為變數指派 certificateName 「myCertificate」值,並使用預設策略。
憑證建立是長時間執行的作業,您可以輪詢進度或等待其完成。
備註
此快速啟動會建立自簽憑證以供示範使用。 對於生產工作負載,請將 金鑰保存庫 與受信任的憑證授權中心整合。 請參見 Secure Your Azure Key Vault certificates。
SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
certificatePoller.waitForCompletion();
建立完成後,您可以透過下列呼叫取得憑證:
KeyVaultCertificate createdCertificate = certificatePoller.getFinalResult();
擷取憑證
您現在可以使用 certificateClient.getCertificate 方法擷取先前建立的憑證。
KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);
您現在可以使用 retrievedCertificate.getName、retrievedCertificate.getProperties 等作業來存取已擷取的憑證的詳細資料。以及其內容 retrievedCertificate.getCer。
刪除憑證
最後,我們將使用 certificateClient.beginDeleteCertificate 方法 (也是長時間執行的作業),從您的金鑰保存庫中刪除憑證。
SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
deletionPoller.waitForCompletion();
清除資源
當不再需要時,你可以使用 Azure CLI 或 Azure PowerShell 移除你的金鑰庫和對應的資源群組。
az group delete -g "myResourceGroup"
Remove-AzResourceGroup -Name "myResourceGroup"
範例程式碼
package com.keyvault.certificates.quickstart;
import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;
public class App {
public static void main(String[] args) throws InterruptedException, IllegalArgumentException {
String keyVaultName = System.getenv("KEY_VAULT_NAME");
String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";
System.out.printf("key vault name = %s and kv uri = %s \n", keyVaultName, keyVaultUri);
CertificateClient certificateClient = new CertificateClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
String certificateName = "myCertificate";
System.out.print("Creating a certificate in " + keyVaultName + " called '" + certificateName + " ... ");
SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
certificatePoller.waitForCompletion();
System.out.print("done.");
System.out.println("Retrieving certificate from " + keyVaultName + ".");
KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);
System.out.println("Your certificate's ID is '" + retrievedCertificate.getId() + "'.");
System.out.println("Deleting your certificate from " + keyVaultName + " ... ");
SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
deletionPoller.waitForCompletion();
System.out.print("done.");
}
}
後續步驟
在本快速入門中,您已建立金鑰保存庫和憑證、擷取該憑證然後刪除。 想了解更多關於 金鑰保存庫 以及如何將其與應用程式整合,請繼續閱讀以下文章。