elasticsearch-certutil编辑

elasticsearch-certutil 命令简化了在 Elastic Stack 中创建用于传输层安全 (TLS) 的证书的过程。

概要编辑

bin/elasticsearch-certutil
(
(ca [--ca-dn <name>] [--days <n>] [--pem])

| (cert ([--ca <file_path>] | [--ca-cert <file_path> --ca-key <file_path>])
[--ca-dn <name>] [--ca-pass <password>] [--days <n>]
[--dns <domain_name>] [--in <input_file>] [--ip <ip_addresses>]
[--multiple] [--name <file_name>] [--pem] [--self-signed])

| (csr [--dns <domain_name>] [--in <input_file>] [--ip <ip_addresses>]
[--name <file_name>])

[-E <KeyValuePair>] [--keysize <bits>] [--out <file_path>]
[--pass <password>]
)

| http

[-h, --help] ([-s, --silent] | [-v, --verbose])

描述编辑

您可以指定以下模式之一:cacertcsrhttpelasticsearch-certutil 命令还支持静默操作模式,以简化批处理操作。

CA 模式编辑

ca 模式生成新的证书颁发机构 (CA)。 默认情况下,它会生成一个 PKCS#12 输出文件,其中包含 CA 证书和 CA 的私钥。 如果指定 --pem 参数,则该命令会生成一个 zip 文件,其中包含 PEM 格式的证书和私钥。

您可以随后将这些文件用作命令的 cert 模式的输入。

CERT 模式编辑

cert 模式生成 X.509 证书和私钥。 默认情况下,它会生成单个证书和密钥以供在单个实例上使用。

要为多个实例生成证书和密钥,请指定 --multiple 参数,该参数会提示您输入有关每个实例的详细信息。 或者,您可以使用 --in 参数指定包含实例详细信息的 YAML 文件。

实例是 Elastic Stack 中需要 TLS 或 SSL 证书的任何部分。 根据您的配置,Elasticsearch、Logstash、Kibana 和 Beats 可能都需要证书和私钥。 实例所需的最低限度信息是其名称,该名称用作证书的通用名称。 实例名称可以是主机名值或完整的可分辨名称。 如果实例名称会导致无效的文件或目录名称,则还必须在 --name 命令参数中或输入 YAML 文件的 filename 字段中指定文件名。

您可以选择为每个实例提供 IP 地址或 DNS 名称。 如果既未指定 IP 地址也未指定 DNS 名称,则 Elastic Stack 产品无法执行主机名验证,您可能需要将 verification_mode 安全设置配置为仅限 certificate。 有关此设置的更多信息,请参阅安全设置

除非指定了 --self-signed 参数,否则此命令生成的所有证书都由 CA 签名。 除非指定了 --self-signed,否则您必须使用 --ca--ca-cert--ca-key 参数提供您自己的 CA。 有关生成 CA 的更多信息,请参阅此命令的 CA 模式。 要生成自签名证书,请使用 --self-signed 参数。

默认情况下,cert 模式会生成一个 PKCS#12 输出文件,其中包含实例证书、实例私钥和 CA 证书。 如果指定 --pem 参数,则该命令会生成 PEM 格式的证书和密钥,并将它们打包到一个 zip 文件中。 如果指定 --multiple--in 参数,则该命令会生成一个包含生成的证书和密钥的 zip 文件。

CSR 模式编辑

csr 模式生成证书签名请求 (CSR),您可以将其发送到受信任的证书颁发机构以获取签名证书。 签名证书必须采用 PEM 或 PKCS#12 格式才能使用 Elasticsearch 安全功能。

默认情况下,该命令会为单个实例生成单个 CSR。

要为多个实例生成 CSR,请指定 --multiple 参数,该参数会提示您输入有关每个实例的详细信息。 或者,您可以使用 --in 参数指定包含实例详细信息的 YAML 文件。

csr 模式会生成一个 zip 文件,其中包含每个实例的 CSR 和私钥。 每个 CSR 都作为 PKCS#10 CSR 的标准 PEM 编码提供。 每个密钥都作为 RSA 私钥的 PEM 编码提供。

HTTP 模式编辑

http 模式指导您完成为 Elasticsearch 的 HTTP (REST) 接口生成证书的过程。 它会询问您一些问题,以便根据您的需要生成正确的文件集。 例如,根据您的选择,它可能会生成一个 zip 文件,其中包含证书颁发机构 (CA)、证书签名请求 (CSR) 或用于 Elasticsearch 和 Kibana 的证书和密钥。 zip 文件中的每个文件夹都包含一个自述文件,说明如何使用这些文件。

参数编辑

ca
指定生成新的本地证书颁发机构 (CA)。 此参数不能与 csrcerthttp 参数一起使用。
cert
指定生成新的 X.509 证书和密钥。 此参数不能与 csrcahttp 参数一起使用。
csr
指定生成证书签名请求。 此参数不能与 cacerthttp 参数一起使用。
http
为 Elasticsearch HTTP 接口生成新的证书或证书请求。 此参数不能与 cacertcsr 参数一起使用。
--ca <file_path>
指定现有 CA 密钥对(PKCS#12 格式)的路径。 此参数仅适用于 cert 参数。
--ca-cert <file_path>
指定现有 CA 证书(PEM 格式)的路径。 您还必须指定 --ca-key 参数。 --ca-cert 参数仅适用于 cert 参数。
--ca-dn <name>
定义用于生成的 CA 证书的*可分辨名称* (DN)。 默认值为 CN=Elastic Certificate Tool Autogenerated CA。 此参数不能与 csrhttp 参数一起使用。
--ca-key <file_path>
指定现有 CA 私钥(PEM 格式)的路径。 您还必须指定 --ca-cert 参数。 --ca-key 参数仅适用于 cert 参数。
--ca-pass <password>
指定现有 CA 私钥或生成的 CA 私钥的密码。 此参数仅适用于 cert 参数
--days <n>
指定一个整数值,表示生成的证书的有效天数。 默认值为 1095。 此参数不能与 csrhttp 参数一起使用。
--dns <domain_name>
指定以逗号分隔的 DNS 名称列表。 此参数不能与 cahttp 参数一起使用。
-E <KeyValuePair>
配置设置。
-h, --help
返回所有命令参数。
--in <input_file>
指定用于以静默模式运行的文件。 输入文件必须是 YAML 文件。 此参数不能与 cahttp 参数一起使用。
--ip <IP_addresses>
指定以逗号分隔的 IP 地址列表。 此参数不能与 cahttp 参数一起使用。
--keysize <bits>
定义在生成的 RSA 密钥中使用的位数。 默认值为 2048。 此参数不能与 http 参数一起使用。
--multiple
指定为多个实例生成文件。 此参数不能与 cahttp 参数一起使用。
--name <file_name>
指定生成的证书的名称。 此参数不能与 cahttp 参数一起使用。
--out <file_path>
指定输出文件的路径。 此参数不能与 http 参数一起使用。
--pass <password>

指定生成的私钥的密码。 此参数不能与 http 参数一起使用。

以 PKCS#12 格式存储的密钥始终受密码保护,但是,此密码可能为空白。 如果要指定没有提示的空白密码,请在命令行上使用 --pass ""(不带 =)。

仅当指定了 --pass 参数时,以 PEM 格式存储的密钥才受密码保护。 如果您没有为 --pass 参数提供参数,则系统会提示您输入密码。 加密的 PEM 文件不支持空白密码(如果您不想对 PEM 密钥进行密码保护,则不要指定 --pass)。

--pem
以 PEM 格式而不是 PKCS#12 生成证书和密钥。 此参数不能与 csrhttp 参数一起使用。
--self-signed

生成自签名证书。 此参数仅适用于 cert 参数。

不建议将此选项用于在集群上设置 TLS。实际上,只有在确定不需要 CA 并且直接信任证书本身时,才应使用自签名证书。

-s, --silent
显示最少的输出。
-v, --verbose
显示详细输出。

示例编辑

以下命令生成 PKCS#12 格式的 CA 证书和私钥

bin/elasticsearch-certutil ca

系统会提示您输入输出文件名和密码。或者,您可以指定 --out--pass 参数。

然后,您可以使用新的 CA 生成 X.509 证书和私钥。例如

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

系统会提示您输入 CA 密码以及输出文件名和密码。或者,您可以指定 --ca-pass--out--pass 参数。

默认情况下,此命令会生成一个名为 elastic-certificates.p12 的文件,您可以将其复制到要配置的每个 Elastic 产品的相关配置目录中。有关更多信息,请参阅使用 TLS 加密节点间通信

在静默模式下使用 elasticsearch-certutil编辑

要使用静默操作模式,您必须创建一个包含实例信息的 YAML 文件。它必须匹配以下格式

instances:
  - name: "node1" 
    ip: 
      - "192.0.2.1"
    dns: 
      - "node1.mydomain.com"
  - name: "node2"
    ip:
      - "192.0.2.2"
      - "198.51.100.1"
  - name: "node3"
  - name: "node4"
    dns:
      - "node4.mydomain.com"
      - "node4.internal"
  - name: "CN=node5,OU=IT,DC=mydomain,DC=com"
    filename: "node5" 

实例的名称。这可以是简单的字符串值,也可以是可分辨名称 (DN)。这是唯一必填字段。

表示此实例的 IP 地址的可选字符串数组。允许使用 IPv4 和 IPv6 值。这些值将添加为主体备用名称。

表示此实例的 DNS 名称的可选字符串数组。这些值将添加为主体备用名称。

用于此实例的文件名。此名称用作输出中包含实例文件的目录的名称。它也用于目录中文件的名称。此文件名不应包含扩展名。注意:如果为实例提供的 name 不代表有效文件名,则必须存在 filename 字段。

准备好 YAML 文件后,您可以使用 elasticsearch-certutil 命令生成证书或证书签名请求。只需使用 --in 参数指定文件的位置。例如

bin/elasticsearch-certutil cert --silent --in instances.yml --out test1.zip --pass testpassword --ca elastic-stack-ca.p12

此命令生成一个压缩的 test1.zip 文件。解压缩输出文件后,instances.yml 文件中列出的每个实例都有一个目录。每个实例目录都包含一个 PKCS#12 (.p12) 文件,其中包含实例证书、实例私钥和 CA 证书。

您还可以使用 YAML 文件生成证书签名请求。例如

bin/elasticsearch-certutil csr --silent --in instances.yml --out test2.zip --pass testpassword

此命令生成一个压缩文件,其中包含每个实例的目录。每个实例目录都包含一个证书签名请求(*.csr 文件)和一个私钥(*.key 文件)。