elasticsearch-certutil
elasticsearch-certutil
命令简化了为 Elastic Stack 中的传输层安全 (TLS) 创建证书的过程。
bin/elasticsearch-certutil
(
(ca [--ca-dn <name>] [--keyusage <key_usages>] [--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])
您可以指定以下模式之一:ca
、cert
、csr
、http
。elasticsearch-certutil
命令还支持静默操作模式,以方便进行批量操作。
ca
模式生成一个新的证书颁发机构 (CA)。默认情况下,它生成一个 PKCS#12 输出文件,其中包含 CA 证书和 CA 私钥。如果您指定了 --pem
参数,则该命令会生成一个 zip 文件,其中包含 PEM 格式的证书和私钥。
您随后可以将这些文件用作该命令 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),您可以将其发送给受信任的证书颁发机构以获取签名的证书。签名的证书必须采用 PEM 或 PKCS#12 格式才能与 Elasticsearch 安全功能配合使用。
默认情况下,该命令为单个实例生成一个 CSR。
要为多个实例生成 CSR,请指定 --multiple
参数,该参数会提示您输入每个实例的详细信息。或者,您可以使用 --in
参数指定一个包含实例详细信息的 YAML 文件。
csr
模式生成一个 zip 文件,其中包含每个实例的 CSR 和私钥。每个 CSR 都以 PKCS#10 CSR 的标准 PEM 编码形式提供。每个密钥都以 RSA 私钥的 PEM 编码形式提供。
http
模式引导您完成为 Elasticsearch 的 HTTP (REST) 接口生成证书的过程。它会询问您一系列问题,以便为您的需求生成正确的文件集。例如,根据您的选择,它可能会生成一个 zip 文件,其中包含证书颁发机构 (CA)、证书签名请求 (CSR) 或用于 Elasticsearch 和 Kibana 的证书和密钥。zip 文件中的每个文件夹都包含一个 readme 文件,其中说明了如何使用这些文件。
ca
- 指定生成新的本地证书颁发机构 (CA)。此参数不能与
csr
、cert
或http
参数一起使用。 cert
- 指定生成新的 X.509 证书和密钥。此参数不能与
csr
、ca
或http
参数一起使用。 csr
- 指定生成证书签名请求。此参数不能与
ca
、cert
或http
参数一起使用。 http
- 为 Elasticsearch HTTP 接口生成新证书或证书请求。此参数不能与
ca
、cert
或csr
参数一起使用。 --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
。此参数不能与csr
或http
参数一起使用。 --ca-key <file_path>
- 指定现有 CA 私钥(PEM 格式)的路径。您还必须指定
--ca-cert
参数。--ca-key
参数仅适用于cert
参数。 --ca-pass <password>
- 指定现有 CA 私钥或生成的 CA 私钥的密码。此参数仅适用于
cert
参数 --keyusage <key_usages>
- 指定用于生成的 CA 证书的密钥用途限制的逗号分隔列表(根据 RFC 5280)。默认值为
keyCertSign,cRLSign
。此参数只能与ca
参数一起使用。 --days <n>
- 指定一个整数值,表示生成证书的有效期天数。默认值为
1095
。此参数不能与csr
或http
参数一起使用。 --dns <domain_name>
- 指定 DNS 名称的逗号分隔列表。此参数不能与
ca
或http
参数一起使用。 -E <KeyValuePair>
- 配置设置。
-h, --help
- 返回所有命令参数。
--in <input_file>
- 指定用于在静默模式下运行的文件。输入文件必须是 YAML 文件。此参数不能与
ca
或http
参数一起使用。 --ip <IP_addresses>
- 指定 IP 地址的逗号分隔列表。此参数不能与
ca
或http
参数一起使用。 --keysize <bits>
- 定义生成 RSA 密钥使用的位数。默认值为
2048
。此参数不能与http
参数一起使用。 --multiple
- 指定为多个实例生成文件。此参数不能与
ca
或http
参数一起使用。 --name <file_name>
- 指定生成证书的名称。此参数不能与
ca
或http
参数一起使用。 --out <file_path>
- 指定输出文件的路径。此参数不能与
http
参数一起使用。 --pass <password>
-
指定生成私钥的密码。此参数不能与
http
参数一起使用。存储在 PKCS#12 格式中的密钥始终受密码保护,但此密码可以为空白。如果您想在不提示的情况下指定空白密码,请在命令行上使用
--pass ""
(不带=
)。只有在指定了
--pass
参数的情况下,存储在 PEM 格式中的密钥才受密码保护。如果您未为--pass
参数提供参数,则会提示您输入密码。加密的 PEM 文件不支持空白密码(如果您不想使用密码保护您的 PEM 密钥,则不要指定--pass
)。 --pem
- 生成 PEM 格式而不是 PKCS#12 格式的证书和密钥。此参数不能与
csr
或http
参数一起使用。 --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 加密节点间通信。
要使用静默操作模式,您必须创建一个包含实例信息的 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 值。这些值将添加为主题备用名称 (Subject Alternative Names)。
- 一个可选的字符串数组,表示此实例的 DNS 名称。这些值将添加为主题备用名称 (Subject Alternative Names)。
- 此实例使用的文件名。此名称用作输出中包含实例文件的目录名称。它也用于目录中文件的名称。此文件名不应包含扩展名。注意:如果为实例提供的
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
文件)。