# Elasticsearch(version7)とElasticsearch-PHPクライアント(version8)間の通信について

**URL:** <https://discuss.elastic.co/t/elasticsearch-version7-elasticsearch-php-version8/360261>\
**Category:** Elasticsearch\
**Tags:** elastic-stack-security, language-clients\
**Created:** [May 27, 2024, 7:38am UTC](https://discuss.elastic.co/t/elasticsearch-version7-elasticsearch-php-version8/360261 "2024-05-27T07:38:04Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Totsuka](https://avatars.discourse-cdn.com/v4/letter/t/b4bc9f/32.png) [@Totsuka](https://discuss.elastic.co/u/Totsuka)\
**Post date:** [May 27, 2024, 7:38am UTC](https://discuss.elastic.co/t/elasticsearch-version7-elasticsearch-php-version8/360261/1 "2024-05-27T07:38:04Z")

</div>

お世話になっております。

Elasticsearch(version7)とElasticsearch-PHPクライアント(version8)間の通信についてご質問いたします。

＜状況＞  
・Elasticsearch：バージョン7.17.9  
・Elasticsearch-PHPクライアント：バージョン8.0.0  
・Elasticsearchがインストールされているサーバと、Elasticsearch-PHPクライアントによる通信を実装したアプリケーションサーバは、別サーバであり、同じプライベートネットワーク内にあります。

Elasticsearchはバージョン7のため、デフォルトでSSL/TLS化されていないと考え、以下のコマンドで自己署名証明書を生成しております。

```auto
bin/elasticsearch-certutil cert ca --pem

```

参考：[elasticsearch-certutil | Elasticsearch Guide [7.17] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/certutil.html)

elasticsearch.ymlの設定は以下の通りです。

```auto
xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.key: certs/instance.key
xpack.security.http.ssl.certificate: certs/instance.crt
xpack.security.http.ssl.certificate_authorities: certs/ca.crt
xpack.security.transport.ssl.key: certs/instance.key
xpack.security.transport.ssl.certificate: certs/instance.crt
xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
xpack.security.http.ssl.verification_mode: certificate

```

⇒このことから、Elasticsearch自体のSSL/TLS設定も、HTTPS化も完了しているものと考えております。

Elasticsearch-PHPクライアントによる実装は以下の通りにしました。

```auto
<?php
use GuzzleHttp\Client as HttpClient;
use Elastic\Elasticsearch\ClientBuilder;

function ClientBuilder(){
    $hosts = ['https://IP:port'];
    $client = ClientBuilder::create()
        ->setHttpClient(new HttpClient(['verify' => false]))
        ->setHosts($hosts)
        ->setBasicAuthentication('elastic','password')
        ->build();
    return $client;
}
?>

```

＜ご質問＞  
TLSによりクライアントとサーバーの間の通信を保護するにはどのように設定したらよろしいでしょうか？

ElasticsearchとElasticsearch-PHPクライアントが両方バージョン8の場合は以下の手順の通りと思います。

> **[Elasticsearch 8向けの新しいPHPクライアントが登場](https://www.elastic.co/jp/blog/introducing-the-new-php-client-for-elasticsearch-8)**
>
> Elasticは、Elasticsearch 8向けの、PSR-7標準とPSR-18標準を使用する新しいPHPクライアントをリリースしました。今回のリリースでは、新しいプラグイン型アーキテクチャーの採用、開発者エクスペリエンスの向上、BCブレーク（後方互換性が失われる変更）の回避が同時に実現されています。...

> **[Connecting | Elasticsearch-PHP \[8.0\] | Elastic](https://www.elastic.co/guide/en/elasticsearch/client/php-api/8.0/connecting.html#auth-http)**

今回、ElasticsearchとElasticsearch-PHPクライアントのバージョンが異なるため、正しい手順が不明という状況です。

よろしくお願いいたします。
