専用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を使用してプロジェクトの依存関係を管理する
クライアントのプロジェクトディレクトリに切り替え、次のコードを実行して、Alibaba Cloud DKMS-GCS SDK for PHPを依存関係としてインストールします。
composer require alibabacloud/dkms-gcs-sdk
次のコンテンツをcomposer.jsonファイルに追加して、Alibaba Cloud DKMS-GCS SDK for PHPへの依存関係を宣言します。
"require": { "alibabacloud/dkms-gcs-sdk": "SDK version" }
説明Dedicated KMS SDKの最新バージョンの詳細については、オープンソースコードリポジトリをご参照ください。
クライアントのプロジェクトディレクトリに切り替え、次のコードを実行して依存関係をインストールします。
composer install
依存関係がインストールされたら、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のデフォルト設定を変更する必要があります。
認証機関 (CA) 証明書を設定します。
本番環境で安全な通信を確保するには、PHP信頼証明書を設定する必要があります。
RuntimeOptions
でverify
フィールドを設定します。 サンプルコード:<?php use AlibabaCloud\Dkms\Gcs\OpenApi\Util\Models\RuntimeOptions; $runtimeOptions = new RuntimeOptions(); $runtimeOptions->verify = 'path/to/caCert.pem'; ... $encryptResponse = $client->encryptWithOptions($encryptRequest, $runtimeOptions);
開発環境では、
RuntimeOptions
のignoreSSL
フィールドを使用して、信頼できる証明書の検証を一時的に無視できます。 サンプルコード:<?php use AlibabaCloud\Dkms\Gcs\OpenApi\Util\Models\RuntimeOptions; $runtimeOptions = new RuntimeOptions(); $runtimeOptions->ignoreSSL = true; ... $encryptResponse = $client->encryptWithOptions($encryptRequest, $runtimeOptions);
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;