專屬KMS SDK for PHP幫助您通過簡單的編程訪問專屬KMS的API,實現加密解密、簽名驗簽和獲取憑據信息的業務訴求。

背景信息

您可以訪問開源代碼倉庫,查看SDK源碼及代碼示例。同時也歡迎您提出寶貴意見,或者提供代碼示例。

前提條件

  • 您已經啟用專屬KMS基礎版實例,為實例創建密鑰及應用接入點,并保存了Client Key及CA證書。具體操作,請參見快速入門
    說明 CA證書下載后文件名默認為PrivateKmsCA_kst-******.pem,應用身份憑證文件下載后文件名默認為ClientKey_******.json。
  • 您已經獲取了專屬KMS基礎版實例VPC地址,并確保可以通過以下方式訪問專屬KMS基礎版實例VPC地址:
    • 啟用專屬KMS基礎版實例時設置了VPC ID,在該VPC中您可以訪問專屬KMS基礎版實例VPC地址。
    • 您專屬KMS SDK程序所在環境的網絡,可以正常解析并訪問專屬KMS基礎版實例VPC地址。

    具體操作,請參見查詢專屬KMS基礎版實例

安裝SDK

  • 方式一(推薦):通過Composer來管理項目依賴

    1. 在終端中切換到項目目錄,直接執行以下代碼安裝AlibabaCloud DKMS-GCS SDK for PHP作為依賴項。
      composer require alibabacloud/dkms-gcs-sdk
    2. 在composer.json中添加以下內容,聲明對AlibabaCloud DKMS-GCS SDK for PHP的依賴。
      "require": {
        "alibabacloud/dkms-gcs-sdk": "SDK版本"
        }
      說明 關于最新的SDK版本,請參考開源代碼倉庫
    3. 在終端中切換到項目目錄下,執行以下代碼安裝依賴。
      composer install
    4. 使用Composer安裝完成后,在PHP代碼中引入依賴。
      require_once __DIR__ . '/vendor/autoload.php';
  • 方式二:直接下載SDK源碼

    訪問開源代碼倉庫下載SDK源碼,在PHP代碼中引入SDK目錄下的autoload.php文件。

    require_once '/path/to/dkms-gcs-sdk/autoload.php';

初始化SDK

您可以初始化一個專屬KMS基礎版實例的PHP客戶端,用于調用專屬KMS基礎版實例管理的密鑰等資源。使用PHP SDK發起專屬KMS API請求,您需要初始化一個Client實例,并根據需要修改Config的默認配置項。

  1. 配置CA證書。為保障生產環境通信安全,需要配置Java可信證書。
    設置RuntimeOptionsverify字段。示例代碼如下:
    <?php
    
    use AlibabaCloud\Dkms\Gcs\OpenApi\Util\Models\RuntimeOptions;
    
    $runtimeOptions = new RuntimeOptions();
    $runtimeOptions->verify = 'path/to/caCert.pem';
    
    ...
    $encryptResponse = $client->encryptWithOptions($encryptRequest, $runtimeOptions);

    開發環境可使用RuntimeOptionsignoreSSL設置臨時忽略可信證書的驗證。示例代碼如下:

    <?php
    
    use AlibabaCloud\Dkms\Gcs\OpenApi\Util\Models\RuntimeOptions;
    
    $runtimeOptions = new RuntimeOptions();
    $runtimeOptions->ignoreSSL = true;
    
    ...
    $encryptResponse = $client->encryptWithOptions($encryptRequest, $runtimeOptions);
  2. 創建專屬KMS基礎版Client。

    創建專屬KMS基礎版Client時,需要指定實例的Endpoint。EndPoint為專屬KMS基礎版實例VPC地址去掉https://。關于專屬KMS基礎版實例VPC地址的更多信息,請參見查詢專屬KMS基礎版實例

    <?php
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Client as AlibabaCloudDkmsGcsSdkClient;
    use AlibabaCloud\Dkms\Gcs\OpenApi\Models\Config as AlibabaCloudDkmsGcsOpenApiConfig;
    
    $config = new AlibabaCloudDkmsGcsOpenApiConfig();
    //連接協議,固定為HTTPS。
    $config->protocol = 'https';
    //專屬KMS基礎版實例Client Key。
    $config->clientKeyContent = '<your client key content>';
    //專屬KMS基礎版實例Client Key解密口令。
    $config->password = '<your client key password>';
    //Endpoint,專屬KMS基礎版實例的服務地址去掉“https://”。
    //示例:<service_id>.cryptoservice.kms.aliyuncs.com;
    $config->endpoint = '<your dkms instance service address>';
    
    $client = new AlibabaCloudDkmsGcsSdkClient($config);

代碼示例

  • 專屬KMS基礎版Client調用Encrypt接口使用對稱密鑰加密數據

    詳細代碼示例,請參見原始代碼

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\EncryptRequest;
    
    $encryptRequest = new EncryptRequest();
    //專屬KMS基礎版實例加密密鑰的ID或別名(Alias)。
    $encryptRequest->keyId = '<your cipher key id>';
    //待加密數據。
    $encryptRequest->plaintext = \AlibabaCloud\Dkms\Gcs\OpenApi\Util\Utils::toBytes('encrypt plaintext');
    
    $encryptResponse = $client->encryptWithOptions($encryptRequest, $runtimeOptions);
    //密文。
    $ciphertextBlob = $encryptResponse->ciphertextBlob;
    //Cipher初始向量,用于解密數據。
    $iv = $encryptResponse->iv;
    //請求ID。
    $requestId = $encryptResponse->requestId;
  • 專屬KMS基礎版Client調用Decrypt接口使用對稱密鑰解密密文

    詳細代碼示例,請參見原始代碼

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\DecryptRequest;
    
    $decryptRequest = new DecryptRequest();
    //專屬KMS基礎版實例解密密鑰的ID或別名(Alias)。
    $decryptRequest->keyId = '<your cipher key id>';
    //待解密數據,加密返回的密文。
    $decryptRequest->ciphertextBlob = <your ciphertext>;
    //Cipher初始向量,必須與加密時一致。
    $decryptRequest->iv = <IV value>;
    
    $decryptResponse = $client->decryptWithOptions($decryptRequest, $runtimeOptions);
    //原始明文數據。
    $plaintext = $decryptResponse->plaintext;
    //請求ID。
    $requestId = $decryptResponse->requestId;
  • 專屬KMS基礎版Client調用Sign接口使用非對稱密鑰進行數字簽名

    詳細代碼示例,請參見原始代碼

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\SignRequest;
    
    $signRequest = new SignRequest();
    //專屬KMS基礎版實例簽名密鑰的ID或別名(Alias)。
    $signRequest->keyId = 'your cipher key id';
    //待簽名數據。
    $signRequest->message = <the data to sign>;
    
    $signResponse = $client->signWithOptions($signRequest, $runtimeOptions);
    //簽名值。
    $signature = $signResponse->signature;
    //請求ID。
    $requestId = $signResponse->requestId;
  • 專屬KMS基礎版Client調用Verify接口使用非對稱密鑰驗證數字簽名

    詳細代碼示例,請參見原始代碼

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\VerifyRequest;
    
    $verifyRequest = new VerifyRequest();
    //專屬KMS基礎版實例簽名密鑰的ID或別名(Alias)。
    $verifyRequest->keyId = 'your cipher key id';
    //待驗證簽名的數據。
    $verifyRequest->message = <the data to sign>;
    //待驗證簽名值。
    $verifyRequest->signature = <the signature to verify>;
    
    $verifyResponse = $client->verifyWithOptions($verifyRequest, $runtimeOptions);
    //驗簽結果。
    $value = $verifyResponse->value;
    //請求ID。
    $requestId = $verifyResponse->requestId;
  • 使用專屬KMS基礎版Client調用GetSecretValue接口獲取憑據值

    詳細代碼示例,請參見原始代碼

    重要 0.2.2及以上版本的專屬KMS PHP SDK才支持獲取憑據值。
    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\GetSecretValueRequest;
    
    // 您在專屬KMS創建的憑據名稱。
    $secretName = '<your secret name>';
    
    $getSecretValueRequest = new GetSecretValueRequest([
        'secretName' => $secretName,
    ]);
    
    // 調用獲取憑據接口。
    $getSecretValueResponse = $client->getSecretValueWithOptions($getSecretValueRequest, $runtimeOptions);
    
    // 憑據值。
    $_secretData = $getSecretValueResponse->secretData;
    // 請求ID。
    $_requestId = $getSecretValueResponse->requestId;