| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 | [role="xpack"][testenv="gold+"][[certutil]]== elasticsearch-certutilThe `elasticsearch-certutil` command simplifies the creation of certificates foruse with Transport Layer Security (TLS) in the Elastic Stack.[float]=== Synopsis[source,shell]--------------------------------------------------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>][--keep-ca-key] [--multiple] [--name <file_name>] [--pem])| (csr [--dns <domain_name>] [--in <input_file>] [--ip <ip_addresses>][--name <file_name>])[-E <KeyValuePair>] [--keysize <bits>] [--out <file_path>][--pass <password>])[-h, --help] ([-s, --silent] | [-v, --verbose])--------------------------------------------------[float]=== DescriptionYou can specify one of the following modes: `ca`, `cert`, `csr`. The`elasticsearch-certutil` command also supports a silent mode of operation toenable easier batch operations.[float][[certutil-ca]]==== CA modeThe `ca` mode generates a new certificate authority (CA). By default, itproduces a single PKCS#12 output file, which holds the CA certificate and theprivate key for the CA. If you specify the `--pem` parameter, the commandgenerates a zip file, which contains the certificate and private key in PEMformat.You can subsequently use these files as input for the `cert` mode of the command.[float][[certutil-cert]]==== CERT modeThe `cert` mode generates X.509 certificates and private keys. By default, itproduces a single certificate and key for use on a single instance.To generate certificates and keys for multiple instances, specify the`--multiple` parameter, which prompts you for details about each instance.Alternatively, you can use the `--in` parameter to specify a YAML file thatcontains details about the instances.An instance is any piece of the Elastic Stack that requires a TLS or SSLcertificate. Depending on your configuration, {es}, Logstash, {kib}, and Beatsmight all require a certificate and private key. The minimum requiredinformation for an instance is its name, which is used as the common name forthe certificate. The instance name can be a hostname value or a fulldistinguished name. If the instance name would result in an invalid file ordirectory name, you must also specify a file name in the `--name` commandparameter or in the `filename` field in an input YAML file.You can optionally provide IP addresses or DNS names for each instance. Ifneither IP addresses nor DNS names are specified, the Elastic stack productscannot perform hostname verification and you might need to configure the`verification_mode` security setting to `certificate` only. For more informationabout this setting, see <<security-settings>>.All certificates that are generated by this command are signed by a CA. You canprovide your own CA with the `--ca` or `--ca-cert` parameters. Otherwise, thecommand automatically generates a new CA for you. For more information aboutgenerating a CA, see the <<certutil-ca,CA mode of this command>>.By default, the `cert` mode produces a single PKCS#12 output file which holdsthe instance certificate, the instance private key, and the CA certificate. Ifyou specify the `--pem` parameter, the command generates PEM formattedcertificates and keys and packages them into a zip file.If you specify the `--keep-ca-key`, `--multiple` or `--in` parameters,the command produces a zip file containing the generated certificates and keys.[float][[certutil-csr]]==== CSR modeThe `csr` mode generates certificate signing requests (CSRs) that you can sendto a trusted certificate authority to obtain signed certificates. The signedcertificates must be in PEM or PKCS#12 format to work with {es}{security-features}.By default, the command produces a single CSR for a single instance.To generate CSRs for multiple instances, specify the `--multiple` parameter,which prompts you for details about each instance. Alternatively, you can usethe `--in` parameter to specify a YAML file that contains details about theinstances.The `csr` mode produces a single zip file which contains the CSRs and theprivate keys for each instance. Each CSR is provided as a standard PEMencoding of a PKCS#10 CSR. Each key is provided as a PEM encoding of an RSAprivate key.[float]=== Parameters`ca`:: Specifies to generate a new local certificate authority (CA). Thisparameter cannot be used with the `csr` or `cert` parameters.`cert`:: Specifies to generate new X.509 certificates and keys.This parameter cannot be used with the `csr` or `ca` parameters.`csr`:: Specifies to generate certificate signing requests. This parametercannot be used with the `ca` or `cert` parameters.`--ca <file_path>`:: Specifies the path to an existing CA key pair(in PKCS#12 format). This parameter cannot be used with the `ca` or `csr` parameters.`--ca-cert <file_path>`:: Specifies the path to an existing CA certificate (inPEM format). You must also specify the `--ca-key` parameter. The `--ca-cert`parameter cannot be used with the `ca` or `csr` parameters.`--ca-dn <name>`:: Defines the _Distinguished Name_ (DN) that is used for thegenerated CA certificate. The default value is`CN=Elastic Certificate Tool Autogenerated CA`. This parameter cannot be usedwith the `csr` parameter.`--ca-key <file_path>`:: Specifies the path to an existing CA private key (inPEM format). You must also specify the `--ca-cert` parameter. The `--ca-key`parameter cannot be used with the `ca` or `csr` parameters.`--ca-pass <password>`:: Specifies the password for an existing CA private keyor the generated CA private key. This parameter cannot be used with the `ca` or`csr` parameters.`--days <n>`:: Specifies an integer value that represents the number of days thegenerated certificates are valid. The default value is `1095`. This parametercannot be used with the `csr` parameter.`--dns <domain_name>`:: Specifies a comma-separated list of DNS names. Thisparameter cannot be used with the `ca` parameter.`-E <KeyValuePair>`:: Configures a setting.`-h, --help`:: Returns all of the command parameters.`--in <input_file>`:: Specifies the file that is used to run in silent mode. Theinput file must be a YAML file. This parameter cannot be used with the `ca`parameter.`--ip <IP_addresses>`:: Specifies a comma-separated list of IP addresses. Thisparameter cannot be used with the `ca` parameter.`--keep-ca-key`:: When running in `cert` mode with an automatically-generatedCA, specifies to retain the CA private key for future use.`--keysize <bits>`::Defines the number of bits that are used in generated RSA keys. The defaultvalue is `2048`.`--multiple`::Specifies to generate files for multiple instances. This parameter cannot beused with the `ca` parameter.`--name <file_name>`::Specifies the name of the generated certificate. This parameter cannot be usedwith the `ca` parameter.`--out <file_path>`:: Specifies a path for the output files.`--pass <password>`:: Specifies the password for the generated private keys.+Keys stored in PKCS#12 format are always password protected, however,this password may be _blank_. If you want to specify a blank passwordwithout a prompt, use `--pass ""` (with no `=`) on the command line.+Keys stored in PEM format are password protected only if the`--pass` parameter is specified. If you do not supply an argument for the`--pass` parameter, you are prompted for a password.Encrypted PEM files do not support blank passwords (if you do notwish to password-protect your PEM keys, then do not specify`--pass`).`--pem`:: Generates certificates and keys in PEM format instead of PKCS#12. Thisparameter cannot be used with the `csr` parameter.`-s, --silent`:: Shows minimal output.`-v, --verbose`:: Shows verbose output.[float]=== ExamplesThe following command generates a CA certificate and private key in PKCS#12format:[source, sh]--------------------------------------------------bin/elasticsearch-certutil ca--------------------------------------------------You are prompted for an output filename and a password. Alternatively, you canspecify the `--out` and `--pass` parameters.You can then generate X.509 certificates and private keys by using the newCA. For example:[source, sh]--------------------------------------------------bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12--------------------------------------------------You are prompted for the CA password and for an output filename and password.Alternatively, you can specify the `--ca-pass`, `--out`, and `--pass` parameters.By default, this command generates a file called `elastic-certificates.p12`,which you can copy to the relevant configuration directory for each Elasticproduct that you want to configure. For more information, see{xpack-ref}/ssl-tls.html[Setting Up TLS on a Cluster].[float][[certutil-silent]]==== Using `elasticsearch-certutil` in Silent ModeTo use the silent mode of operation, you must create a YAML file that containsinformation about the instances. It must match the following format:[source, yaml]--------------------------------------------------instances:  - name: "node1" <1>    ip: <2>      - "192.0.2.1"    dns: <3>      - "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" <4>--------------------------------------------------<1> The name of the instance. This can be a simple string value or can be aDistinguished Name (DN). This is the only required field.<2> An optional array of strings that represent IP Addresses for this instance.Both IPv4 and IPv6 values are allowed. The values are added as SubjectAlternative Names.<3> An optional array of strings that represent DNS names for this instance.The values are added as Subject Alternative Names.<4> The filename to use for this instance. This name is used as the name of thedirectory that contains the instance's files in the output. It is also used inthe names of the files within the directory. This filename should not have anextension. Note: If the `name` provided for the instance does not represent avalid filename, then the `filename` field must be present.When your YAML file is ready, you can use the `elasticsearch-certutil` commandto generate certificates or certificate signing requests. Simply use the `--in`parameter to specify the location of the file. For example:[source, sh]--------------------------------------------------bin/elasticsearch-certutil cert --silent --in instances.yml --out test1.zip --pass testpassword--------------------------------------------------This command generates a compressed `test1.zip` file. After you decompress theoutput file, there is a directory for each instance that was listed in the`instances.yml` file. Each instance directory contains a single PKCS#12 (`.p12`)file, which contains the instance certificate, instance private key, and CAcertificate.You an also use the YAML file to generate certificate signing requests. Forexample:[source, sh]--------------------------------------------------bin/elasticsearch-certutil csr --silent --in instances.yml --out test2.zip --pass testpassword--------------------------------------------------This command generates a compressed file, which contains a directory for eachinstance. Each instance directory contains a certificate signing request(`*.csr` file) and private key (`*.key` file).
 |