KMS執行個體SDK for Java協助您通過簡單的編程訪問KMS執行個體API,實現加密解密、簽名驗簽和擷取憑據值的業務訴求。本文介紹如何初始化SDK以及如何調用介面進行加密解密、簽名驗簽和擷取憑據值。
背景資訊
KMS提供了多種類型的開發工具(SDK),請您在使用前先瞭解各SDK的使用情境。更多資訊,請參見SDK參考。
您可以訪問開原始碼倉庫,查看SDK源碼及程式碼範例。同時也歡迎您提出寶貴意見,或者提供程式碼範例。
前提條件
已購買和啟用KMS執行個體。具體操作,請參見購買和啟用KMS執行個體。
已完成密鑰和憑據的建立。具體操作,請參見軟體密鑰、硬體密鑰、建立憑據。
說明如果您的業務不涉及憑據,則無需建立憑據。
已建立應用存取點並儲存了Client Key、擷取KMS執行個體CA認證。具體操作,請參見建立應用存取點。
請確保應用程式運行環境可訪問KMS執行個體VPC地址。
業務情境
說明
應用程式運行環境和KMS執行個體在同一個地區,且屬於同一個VPC
預設應用程式運行環境和KMS執行個體間網路互連,您無需配置。
應用程式運行環境和KMS執行個體在同一個地區,但屬於不同VPC
您需要配置多個VPC訪問同一個KMS執行個體,具體操作,請參見同地區多VPC訪問KMS執行個體。
添加SDK依賴
在專案中添加Maven依賴,從Maven倉庫中自動下載Java安裝包。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-dkms-gcs-sdk</artifactId>
<version>xx.xx.xx</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea</artifactId>
<version>[1.2.3)</version>
</dependency>
建議您安裝最新版本的SDK。關於版本的更多資訊,請參見KMS執行個體SDK for Java。
初始化SDK
使用Java SDK發起KMS執行個體API請求,您需要初始化一個Client執行個體。
初始化Client執行個體。
import com.aliyun.dkms.gcs.openapi.models.Config;
import com.aliyun.dkms.gcs.sdk.Client;
// 連線協定請設定為"https"。KMS執行個體服務僅允許通過HTTPS協議訪問。
String protocol = "https";
// 設定endpoint為<your KMS Instance Id>.cryptoservice.kms.aliyuncs.com。
String endpoint = "<your KMS Instance Id>.cryptoservice.kms.aliyuncs.com";
// Client Key。
String clientKeyFilePath = "<your client key file path>";
//String clientKey = "<your client key>";
// Client Key口令。
String clientKeyPass = "<your client key password>";
// KMS執行個體的CA認證,可通過檔案路徑或直接設定內容。
String caCertPath = "<path/to/DKMSInstanceCACertificates>";
//String caCert = "<The DKMS instance CA certificates content>";
Client client = new Client(new Config()
.setProtocol(protocol)
.setEndpoint(endpoint)
.setCaFilePath(caCertPath) // 設定CA認證檔案路徑,還支援設定CA認證內容,請根據需要選擇。
//.setCa(caCert) // 設定CA認證內容。
.setClientKeyFile(clientKeyFilePath)//設定應用身份憑證檔案路徑,還支援設定應用身份憑證內容,請根據需要選擇。
//.setClientKeyContent(clientKey)//設定應用身份憑證內容。
.setPassword(clientKeyPass));
使用已初始化的Client調用KMS執行個體API
初始化Client後,您可以通過Client調用KMS執行個體API,本文介紹如下幾個使用情境和程式碼範例。關於KMS執行個體API的詳細資料,請參見執行個體API概覽。
調用Encrypt介面使用對稱金鑰密碼編譯資料
詳細程式碼範例,請參見原始代碼。
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; //密鑰的ID或別名(Alias)。 String cipherKeyId = "<your cipher key id>"; //待加密資料。 byte[] originData = <your origin data to encrypt>; EncryptRequest encryptRequest = new EncryptRequest(); encryptRequest.setKeyId(cipherKeyId); encryptRequest.setPlaintext(originData); EncryptResponse encryptResponse = client.encrypt(encryptRequest); //加密資料。 byte[] cipherData = encryptResponse.getCiphertextBlob(); //Cipher初始向量,用於解密資料。 byte[] iv = encryptResponse.getIv(); //請求ID。 String requestId = encryptResponse.getRequestId();
調用Decrypt介面使用對稱金鑰解密密文
詳細程式碼範例,請參見原始代碼。
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; //密鑰的ID或別名(Alias)。 String cipherKeyId = "<your cipher key id>"; //待解密資料。 byte[] cipherData = <your cipher data to decrypt>; //Cipher初始向量,必須與加密時一致。 byte[] iv = <IV value>; DecryptRequest decryptRequest = new DecryptRequest(); decryptRequest.setKeyId(cipherKeyId); decryptRequest.setCiphertextBlob(cipherData); decryptRequest.setIv(iv); DecryptResponse decryptResponse = client.decrypt(decryptRequest); //未經處理資料。 byte[] originData = decryptResponse.getPlaintext(); //請求ID。 String requestId = decryptResponse.getRequestId();
調用Sign介面使用非對稱金鑰進行數位簽章
詳細程式碼範例,請參見原始代碼。
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; //密鑰的ID或別名(Alias)。 String signerKeyId = "<the signer key id>"; //待簽名資料。 byte[] message = <the data to sign>; SignRequest signRequest = new SignRequest(); signRequest.setKeyId(signKeyId); signRequest.setMessage(message); SignResponse signResponse = client.sign(signRequest); //簽名值。 byte[] signature = signResponse.getSignature(); //請求ID。 String requestId = signResponse.getRequestId();
調用Verify介面使用非對稱金鑰驗證數位簽章
詳細程式碼範例,請參見原始代碼。
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; //密鑰的ID或別名(Alias)。 String signerKeyId = "<the signer key id>"; //待驗證簽名的資料。 byte[] message = <the data to sign>; VerifyRequest verifyRequest = new VerifyRequest(); verifyRequest.setKeyId(signerKeyId); verifyRequest.setMessage(message); verifyRequest.setSignature(signature); VerifyResponse verifyResponse = client.verify(verifyRequest); //驗簽結果。 boolean valid = verifyResponse.getValue(); //請求ID。 String requestId = verifyResponse.getRequestId();
調用GetSecretValue介面擷取憑據值
詳細程式碼範例,請參見原始代碼。
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; //KMS的憑據名稱。 String secretName = "<your-secret-name>"; GetSecretValueRequest request = new GetSecretValueRequest() .setSecretName(secretName); GetSecretValueResponse getSecretValueResponse = client.getSecretValue(request); //憑據值 String secretData = getSecretValueResponse.getSecretData(); //請求ID String requestId = getSecretValueResponse.getRequestId();