同じCAで証明書を更新する
この手順では、元々生成されたCA証明書とキーにアクセスできることを前提としています(または、あなたの組織が保持している)および現在使用中のノード証明書に署名するために使用されました。また、HTTPレイヤーでElasticsearchに接続するクライアントがCA証明書を信頼するように構成されていることも前提としています。
既存の証明書に署名したCAにアクセスできる場合は、クラスター内の各ノードの証明書とキーを置き換えるだけで済みます。各ノードで既存の証明書とキーを置き換え、同じファイル名を使用すると、Elasticsearchはファイルを再読み込みし、新しい証明書とキーを使用し始めます。
各ノードを再起動する必要はありませんが、再起動すると新しいTLS接続が強制され、証明書を更新する際の推奨プラクティスです。したがって、以下の手順には、各証明書を更新した後のノード再起動が含まれています。
以下の手順では、トランスポートレイヤーとHTTPレイヤーの両方の新しいノード証明書とキーを生成するための手順を提供します。どちらのレイヤーの証明書を置き換える必要があるかは、証明書の有効期限によって異なる場合があります。
キーストアがパスワード保護されている場合、パスワードはElasticsearchのセキュア設定に保存され、かつパスワードを変更する必要がある場合は、クラスターでローリング再起動を実行する必要があります。また、Elasticsearchがノードが再起動される前にファイルを再読み込みしないように、キーストアのファイル名を変更する必要があります。
CAが変更された場合は、異なるCAでセキュリティ証明書を更新する手順を完了してください。
トランスポートレイヤー用の新しい証明書を生成する
以下の例ではPKCS#12ファイルを使用していますが、同じ手順がJKSキーストアにも適用されます。
- 1.
ES_PATH_CONF/elasticsearch.yml
ファイルを開き、現在使用中のキーストアの名前と場所を確認します。新しい証明書には同じ名前を使用します。
この例では、キーストアとトラストストアが異なるファイルを指しています。あなたの構成では、証明書とCAを含む同じファイルを使用しているかもしれません。この場合、キーストアとトラストストアの両方にそのファイルのパスを含めてください。
これらの指示は、提供された証明書が信頼されたCAによって署名されており、検証モードがcertificate
に設定されていることを前提としています。この設定により、ノードがホスト名の検証を試みないことが保証されます。
Yaml
xpack.security.transport.ssl.keystore.path: config/elastic-certificates.p12
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.truststore.path: config/elastic-stack-ca.p12
xpack.security.transport.ssl.truststore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
- 2. 既存のCAを使用して、ノード用のキーストアを生成します。現在使用中の証明書に署名したCAを使用する必要があります。
Shell
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
コマンドパラメータ
--ca <ca_file>
- あなたの証明書に署名するために使用されたCAキーストアの名前。既存のCAを生成するために
elasticsearch-certutil
ツールを使用した場合、キーストア名はelastic-stack-ca.p12
にデフォルト設定されます。 - 2.1. 出力ファイルの名前を入力するか、
elastic-certificates.p12
のデフォルトを受け入れます。 - 2.2. プロンプトが表示されたら、ノードキーストアのパスワードを入力します。
- 3. ノードキーストアを作成する際に現在のキーストアパスワードとは異なるパスワードを入力した場合、次のコマンドを実行してElasticsearchキーストアにパスワードを保存します:
Shell
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
- 4. キーストアを更新しているクラスター内の現在のノードで、ローリング再起動を開始します。
必要な変更を行うというステップで停止し、この手順の次のステップに進みます。 - 5. 既存のキーストアを新しいキーストアに置き換え、ファイル名が一致することを確認します。たとえば、
elastic-certificates.p12
。
キーストアパスワードが変更される場合、パスワードを更新する前にElasticsearchがファイルを再読み込みしないように、新しいファイル名でキーストアを保存します。 - 6. 新しいファイル名でキーストアを保存する必要があった場合は、
ES_PATH_CONF/elasticsearch.yml
ファイルを更新して新しいキーストアのファイル名を使用します。たとえば:
Yaml
xpack.security.transport.ssl.keystore.path: config/elastic-certificates.p12
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.truststore.path: config/elastic-stack-ca.p12
xpack.security.transport.ssl.truststore.type: PKCS12
- 7. キーストアを更新したノードを起動します。
- 8. (オプション) SSL証明書APIを使用して、Elasticsearchが新しいキーストアを読み込んだことを確認します。
Python
resp = client.ssl.certificates()
print(resp)
Js
const response = await client.ssl.certificates();
console.log(response);
Console
GET /_ssl/certificates
- 9. トランスポートレイヤーの証明書のみを更新している場合(HTTPレイヤーではない)、ステップ4からステップ8までを1ノードずつ完了し、クラスター内のすべてのキーストアを更新します。その後、ローリング再起動の残りの手順を完了できます。
そうでない場合は、ローリング再起動を完了しないでください。代わりに、HTTPレイヤー用の新しい証明書を生成する手順に進んでください。
次は何ですか?
お疲れ様でした!トランスポートレイヤーのキーストアを更新しました。必要に応じてHTTPレイヤーのキーストアを更新することもできます。HTTPレイヤーのキーストアを更新しない場合は、すべて完了です。
HTTPレイヤー用の新しい証明書を生成する
KibanaやElastic言語クライアントなどの他のコンポーネントは、Elasticsearchに接続する際にこの証明書を検証します。
組織に独自のCAがある場合は、証明書署名要求(CSR)を生成する必要があります。CSRには、CAが証明書を生成し署名するために使用する情報が含まれています。
- 1. Elasticsearchがインストールされているクラスター内の任意のノードで、Elasticsearch HTTP証明書ツールを実行します。
Shell
./bin/elasticsearch-certutil http
このコマンドは、ElasticsearchとKibanaで使用する証明書とキーを含む.zip
ファイルを生成します。各フォルダーには、これらのファイルの使用方法を説明するREADME.txt
が含まれています。
- 1.1. CSRを生成するかどうか尋ねられたら、
n
と入力します。 - 1.2. 既存のCAを使用するかどうか尋ねられたら、
y
と入力します。 - 1.3. CAへの絶対パスを入力します。たとえば、
elastic-stack-ca.p12
ファイルへのパスです。 - 1.4. CAのパスワードを入力します。
- 1.5. 証明書の有効期限を入力します。有効期間は年、月、または日で入力できます。たとえば、1年の場合は
1y
と入力します。 - 1.6. 各ノードごとに1つの証明書を生成するかどうか尋ねられたら、
y
と入力します。
各証明書には独自の秘密鍵があり、特定のホスト名またはIPアドレスに対して発行されます。 - 1.7. プロンプトが表示されたら、クラスター内の最初のノードの名前を入力します。
node.name
パラメータの値として同じノード名を使用すると便利です。 - 1.8. 最初のノードに接続するために使用されるすべてのホスト名を入力します。これらのホスト名は、証明書のSubject Alternative Name(SAN)フィールドにDNS名として追加されます。
HTTPS経由でクラスターに接続するために使用されるすべてのホスト名とバリアントをリストします。 - 1.9. ノードに接続するためにクライアントが使用できるIPアドレスを入力します。
- 1.10. クラスター内の各追加ノードについてこれらの手順を繰り返します。
- 2. 各ノードの証明書を生成した後、プロンプトが表示されたら秘密鍵のパスワードを入力します。
- 3. 生成された
elasticsearch-ssl-http.zip
ファイルを解凍します。この圧縮ファイルには、ElasticsearchとKibanaのそれぞれのディレクトリが含まれています。/elasticsearch
ディレクトリ内には、指定した各ノードのhttp.p12
ファイルを持つディレクトリがあります。たとえば:
Txt
/node1
|_ README.txt
|_ http.p12
|_ sample-elasticsearch.yml
Txt
/node2
|_ README.txt
|_ http.p12
|_ sample-elasticsearch.yml
Txt
/node3
|_ README.txt
|_ http.p12
|_ sample-elasticsearch.yml
- 4. 必要に応じて、
http.p12
ファイルの名前をHTTPクライアント通信の既存の証明書の名前に合わせて変更します。たとえば、node1-http.p12
。 - 5. キーストアを更新しているクラスター内の現在のノードで、ローリング再起動を開始します。
必要な変更を行うというステップで停止し、この手順の次のステップに進みます。 - 6. 既存のキーストアを新しいキーストアに置き換え、ファイル名が一致することを確認します。たとえば、
node1-http.p12
。
キーストアパスワードが変更される場合、パスワードを更新する前にElasticsearchがファイルを再読み込みしないように、新しいファイル名でキーストアを保存します。 - 7. 新しいファイル名でキーストアを保存する必要があった場合は、
ES_PATH_CONF/elasticsearch.yml
ファイルを更新して新しいキーストアのファイル名を使用します。たとえば:
Yaml
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: node1-http.p12
- 8. キーストアパスワードが変更される場合、Elasticsearchのセキュア設定に秘密鍵のパスワードを追加します。
Shell
./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
- 9. キーストアを更新したノードを起動します。
catノードAPIを使用して、ノードがクラスターに参加したことを確認します:
Python
resp = client.cat.nodes()
print(resp)
Ruby
response = client.cat.nodes
puts response
Js
const response = await client.cat.nodes();
console.log(response);
Console
GET _cat/nodes
- 10. (オプション) SSL証明書APIを使用して、Elasticsearchが新しいキーストアを読み込んだことを確認します。
Python
resp = client.ssl.certificates()
print(resp)
Js
const response = await client.ssl.certificates();
console.log(response);
Console
GET /_ssl/certificates