お世話になっております。
Elasticsearch(version7)とElasticsearch-PHPクライアント(version8)間の通信についてご質問いたします。
<状況>
・Elasticsearch:バージョン7.17.9
・Elasticsearch-PHPクライアント:バージョン8.0.0
・Elasticsearchがインストールされているサーバと、Elasticsearch-PHPクライアントによる通信を実装したアプリケーションサーバは、別サーバであり、同じプライベートネットワーク内にあります。
Elasticsearchはバージョン7のため、デフォルトでSSL/TLS化されていないと考え、以下のコマンドで自己署名証明書を生成しております。
bin/elasticsearch-certutil cert ca --pem
参考:elasticsearch-certutil | Elasticsearch Guide [7.17] | Elastic
elasticsearch.ymlの設定は以下の通りです。
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クライアントによる実装は以下の通りにしました。
<?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とElasticsearch-PHPクライアントのバージョンが異なるため、正しい手順が不明という状況です。
よろしくお願いいたします。