すべてのプロダクト
Search
ドキュメントセンター

Key Management Service:PHP用専用KMS SDK

最終更新日:Jan 20, 2025

専用KMS SDK for PHPを使用すると、専用キー管理サービス (KMS) のAPI操作を便利な方法で呼び出すことができます。 専用KMS SDK for PHPは、データ暗号化、データ復号化、署名生成、署名検証、秘密値クエリなどのビジネスシナリオに適しています。

背景情報

オープンソースコードリポジトリにアクセスして、Dedicated KMS SDKのソースコードとサンプルコードを表示できます。 コメントを共有するか、サンプルコードを提供することを歓迎します。

前提条件

  • 専用KMSインスタンスを購入し、ハードウェアセキュリティモジュール (HSM) クラスターに接続します。 インスタンスの顧客マスターキー (CMK) とアプリケーションアクセスエンドポイント (AAP) が作成され、インスタンスのクライアントキーと認証機関 (CA) 証明書が保存されます。 詳細については、「アプリケーションをStandardエディションの専用KMSインスタンスに接続する」をご参照ください。

    説明

    ダウンロードしたCA証明書の名前はPrivateKmsCA_kst-******.pem形式で、ダウンロードしたクライアント鍵ファイルの名前はClientKey_******.json形式です。

  • 専用KMSインスタンスへのアクセスに使用される仮想プライベートクラウド (VPC) アドレスが取得されます。 VPCアドレスは次の要件を満たす必要があります。

    • VPCアドレスは、HSMクラスターの有効化時に指定されます。

    • VPCアドレスはコンピューターからアクセスできます。

    詳細については、「Standardエディションの専用KMSインスタンスの照会」をご参照ください。

専用KMS SDKのインストール

  • 方法1 (推奨): Composerを使用してプロジェクトの依存関係を管理する

    1. クライアントのプロジェクトディレクトリに切り替え、次のコードを実行して、Alibaba Cloud DKMS-GCS SDK for PHPを依存関係としてインストールします。

      composer require alibabacloud/dkms-gcs-sdk
    2. 次のコンテンツをcomposer.jsonファイルに追加して、Alibaba Cloud DKMS-GCS SDK for PHPへの依存関係を宣言します。

      "require": {
        "alibabacloud/dkms-gcs-sdk": "SDK version"
        }
      説明

      Dedicated KMS SDKの最新バージョンの詳細については、オープンソースコードリポジトリをご参照ください。

    3. クライアントのプロジェクトディレクトリに切り替え、次のコードを実行して依存関係をインストールします。

      composer install
    4. 依存関係がインストールされたら、PHPコードで依存関係を参照します。

      require_once __DIR__ . '/vendor/autoload.php';
  • 方法2: SDKソースコードをダウンロードする

    オープンソースコードリポジトリからSDKソースコードをダウンロードし、SDKディレクトリ内のautoload.phpファイルをPHPコードに参照します。 SDKソースコードの詳細については、オープンソースコードリポジトリをご参照ください。

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

専用KMS SDKの初期化

Standardエディションの専用KMSインスタンス用のPHPクライアントを作成して、専用KMSインスタンスによって管理されているリソースを呼び出すことができます。 たとえば、クライアントを使用して、インスタンスによって管理されているキーを呼び出すことができます。 Dedicated KMS SDK for PHPを使用してAPIリクエストを開始する前に、クライアントを作成し、ビジネス要件に基づいてConfigのデフォルト設定を変更する必要があります。

  1. 認証機関 (CA) 証明書を設定します。

    本番環境で安全な通信を確保するには、PHP信頼証明書を設定する必要があります。

    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. Standardエディションの専用KMSインスタンス用のクライアントを作成します。

    Standardエディションの専用KMSインスタンスのクライアントを作成する場合、インスタンスのエンドポイントを指定する必要があります。 エンドポイントはスキームhttpsを除外します。 Standardエディションの専用KMSインスタンスのエンドポイントの詳細については、「Standardエディションの専用KMSインスタンスの照会」をご参照ください。

    <?php
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Client as AlibabaCloudDkmsGcsSdkClient;
    use AlibabaCloud\Dkms\Gcs\OpenApi\Models\Config as AlibabaCloudDkmsGcsOpenApiConfig;
    
    $config = new AlibabaCloudDkmsGcsOpenApiConfig();
    // The connection protocol. Set the value to https. 
    $config->protocol = 'https';
    // The client key of the dedicated KMS instance of the Standard edition. 
    $config->clientKeyContent = '<your client key content>';
    // The password that is used to decrypt the client key of the dedicated KMS instance of the Standard edition. 
    $config->password = '<your client key password>';
    // The endpoint of the dedicated KMS instance of the Standard edition. The endpoint excludes the scheme https. 
    // Example:<service_id>.cryptoservice.kms.aliyuncs.com;
    $config->endpoint = '<your dkms instance service address>';
    
    $client = new AlibabaCloudDkmsGcsSdkClient($config);

  • Standardエディションの専用KMSインスタンスのクライアントを使用して、対称CMKを使用してデータを暗号化するEncrypt操作を呼び出します。

    サンプルコードの詳細については、「ソースコード」をご参照ください。

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\EncryptRequest;
    
    $encryptRequest = new EncryptRequest();
    // The ID or alias of the CMK of the dedicated KMS instance of the Standard edition. 
    $encryptRequest->keyId = '<your cipher key id>';
    // The data that you want to encrypt. 
    $encryptRequest->plaintext = \AlibabaCloud\Dkms\Gcs\OpenApi\Util\Utils::toBytes('encrypt plaintext');
    
    $encryptResponse = $client->encryptWithOptions($encryptRequest, $runtimeOptions);
    // The ciphertext. 
    $ciphertextBlob = $encryptResponse->ciphertextBlob;
    // The initial vector of Cipher that is used to decrypt data. 
    $iv = $encryptResponse->iv;
    // The ID of the request. 
    $requestId = $encryptResponse->requestId;
  • Standardエディションの専用KMSインスタンスのクライアントを使用して、Decrypt操作を呼び出し、対称CMKを使用して暗号文を復号します。

    サンプルコードの詳細については、「ソースコード」をご参照ください。

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\DecryptRequest;
    
    $decryptRequest = new DecryptRequest();
    // The ID or alias of the CMK of the dedicated KMS instance of the Standard edition. 
    $decryptRequest->keyId = '<your cipher key id>';
    // The ciphertext that you want to decrypt. 
    $decryptRequest->ciphertextBlob = <your ciphertext>;
    // The initial vector of Cipher. The initial vector must be the same as the initial vector that is specified for encryption. 
    $decryptRequest->iv = <IV value>;
    
    $decryptResponse = $client->decryptWithOptions($decryptRequest, $runtimeOptions);
    // The plaintext. 
    $plaintext = $decryptResponse->plaintext;
    // The ID of the request. 
    $requestId = $decryptResponse->requestId;
  • Standardエディションの専用KMSインスタンスのクライアントを使用してSign操作を呼び出し、非対称CMKを使用して署名を生成します。

    サンプルコードの詳細については、「ソースコード」をご参照ください。

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\SignRequest;
    
    $signRequest = new SignRequest();
    // The ID or alias of the CMK of the dedicated KMS instance of the Standard edition. 
    $signRequest->keyId = 'your cipher key id';
    // The data to sign. 
    $signRequest->message = <the data to sign>;
    
    $signResponse = $client->signWithOptions($signRequest, $runtimeOptions);
    // The signature value. 
    $signature = $signResponse->signature;
    // The ID of the request. 
    $requestId = $signResponse->requestId;
  • Standardエディションの専用KMSインスタンスのクライアントを使用して、Verify操作を呼び出し、非対称CMKを使用して署名を検証します。

    サンプルコードの詳細については、「ソースコード」をご参照ください。

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\VerifyRequest;
    
    $verifyRequest = new VerifyRequest();
    // The ID or alias of the CMK of the dedicated KMS instance of the Standard edition. 
    $verifyRequest->keyId = 'your cipher key id';
    // The data for which you want to verify the signature. 
    $verifyRequest->message = <the data to sign>;
    // The signature value that you want to verify. 
    $verifyRequest->signature = <the signature to verify>;
    
    $verifyResponse = $client->verifyWithOptions($verifyRequest, $runtimeOptions);
    // The verification result. 
    $value = $verifyResponse->value;
    // The ID of the request. 
    $requestId = $verifyResponse->requestId;
  • Standardエディションの専用KMSインスタンスのクライアントを使用して、GetSecretValue操作を呼び出し、シークレット値を照会します。

    サンプルコードの詳細については、「ソースコード」をご参照ください。

    重要

    PHP V0.2.2以降の専用KMS SDKは、GetSecretValue操作をサポートしています。

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use AlibabaCloud\Dkms\Gcs\Sdk\Models\GetSecretValueRequest;
    
    // The secret name. 
    $secretName = '<your secret name>';
    
    $getSecretValueRequest = new GetSecretValueRequest([
        'secretName' => $secretName,
    ]);
    
    // The call process. 
    $getSecretValueResponse = $client->getSecretValueWithOptions($getSecretValueRequest, $runtimeOptions);
    
    // The secret value. 
    $_secretData = $getSecretValueResponse->secretData;
    // The ID of the request. 
    $_requestId = $getSecretValueResponse->requestId;