为独立 Elastic Agent 配置 SSL/TLS

编辑

根据您配置的是客户端、服务器还是两者,有许多可用的 SSL 配置设置。请参阅下表了解可用设置

有关使用证书的更多信息,请参阅安全连接

表 7. 通用配置选项

设置 描述

ssl.ca_sha256

(字符串) 此配置证书指纹,您可以使用该指纹确保特定证书是经过验证的链的一部分。

该指纹是证书 SHA-256 的 base64 编码字符串。

此检查不能替代正常的 SSL 验证,但它增加了额外的验证。如果此设置与设置为 noneverification_mode 一起使用,则检查将始终失败,因为它不会收到任何经过验证的链。

ssl.cipher_suites

(列表) 要使用的密码套件列表。第一个条目具有最高优先级。如果省略此选项,则使用 Go 加密库的默认套件(推荐)。请注意,TLS 1.3 密码套件在 Go 中不能单独配置,因此不包含在此列表中。

以下密码套件可用

  • ECDHE-ECDSA-AES-128-CBC-SHA
  • ECDHE-ECDSA-AES-128-CBC-SHA256:仅限 TLS 1.2。默认禁用。
  • ECDHE-ECDSA-AES-128-GCM-SHA256:仅限 TLS 1.2。
  • ECDHE-ECDSA-AES-256-CBC-SHA
  • ECDHE-ECDSA-AES-256-GCM-SHA384:仅限 TLS 1.2。
  • ECDHE-ECDSA-CHACHA20-POLY1305:仅限 TLS 1.2。
  • ECDHE-ECDSA-RC4-128-SHA:默认禁用。不建议使用 RC4。
  • ECDHE-RSA-3DES-CBC3-SHA
  • ECDHE-RSA-AES-128-CBC-SHA
  • ECDHE-RSA-AES-128-CBC-SHA256:仅限 TLS 1.2。默认禁用。
  • ECDHE-RSA-AES-128-GCM-SHA256:仅限 TLS 1.2。
  • ECDHE-RSA-AES-256-CBC-SHA
  • ECDHE-RSA-AES-256-GCM-SHA384:仅限 TLS 1.2。
  • ECDHE-RSA-CHACHA20-POLY1205:仅限 TLS 1.2。
  • ECDHE-RSA-RC4-128-SHA:默认禁用。不建议使用 RC4。
  • RSA-3DES-CBC3-SHA
  • RSA-AES-128-CBC-SHA
  • RSA-AES-128-CBC-SHA256:仅限 TLS 1.2。默认禁用。
  • RSA-AES-128-GCM-SHA256:仅限 TLS 1.2。
  • RSA-AES-256-CBC-SHA
  • RSA-AES-256-GCM-SHA384:仅限 TLS 1.2。
  • RSA-RC4-128-SHA:默认禁用。不建议使用 RC4。

以下是用于定义密码套件的缩写列表

  • 3DES:使用三重 DES 的密码套件
  • AES-128/256:使用 128/256 位密钥的 AES 的密码套件。
  • CBC:使用密码块链接作为块密码模式的密码。
  • ECDHE:使用椭圆曲线 Diffie-Hellman (DH) 短暂密钥交换的密码套件。
  • ECDSA:使用椭圆曲线数字签名算法进行身份验证的密码套件。
  • GCM:伽罗瓦/计数器模式用于对称密钥加密。
  • RC4:使用 RC4 的密码套件。
  • RSA:使用 RSA 的密码套件。
  • SHA、SHA256、SHA384:使用 SHA-1、SHA-256 或 SHA-384 的密码套件。

ssl.curve_types

(列表) 用于 ECDHE(椭圆曲线 Diffie-Hellman 短暂密钥交换)的曲线类型列表。

以下椭圆曲线类型可用

  • P-256
  • P-384
  • P-521
  • X25519

ssl.enabled

(布尔值) 启用或禁用 SSL 配置。

默认值: true

如果将 enabled 设置为 false 或缺少 ssl 部分,则 SSL 设置将被禁用。

ssl.supported_protocols

(列表) 允许的 SSL/TLS 版本列表。如果 SSL/TLS 服务器不支持任何指定的版本,则连接将在握手期间或之后断开。允许的协议版本列表包括:SSLv3、TLS 版本 1.0 的 TLSv1TLSv1.0TLSv1.1TLSv1.2TLSv1.3

默认值: [TLSv1.1, TLSv1.2, TLSv1.3]

表 8. 客户端配置选项

设置 描述

ssl.certificate

(字符串) 用于 SSL 客户端身份验证的证书路径。仅当指定 client_authentication 时才需要此设置。如果未指定 certificate,则客户端身份验证不可用,并且如果服务器请求客户端身份验证,则连接可能会失败。如果 SSL 服务器不需要客户端身份验证,则将加载证书,但服务器不会请求或使用该证书。

示例

ssl.certificate: "/path/to/cert.pem"

配置此设置后,还需要 ssl.key 设置。

指定路径,或将证书直接嵌入到 YAML 配置中

ssl.certificate: |
    -----BEGIN CERTIFICATE-----
    CERTIFICATE CONTENT APPEARS HERE
    -----END CERTIFICATE-----

ssl.certificate _authorities

(列表) 用于验证的根证书列表(必需)。如果 certificate_authorities 为空或未设置,则使用系统密钥库。如果 certificate_authorities 是自签名的,则主机系统也需要信任该 CA 证书。

示例

ssl.certificate_authorities: ["/path/to/root/ca.pem"]

指定 Elastic Agent 将读取的文件列表,或将证书直接嵌入到 YAML 配置中

ssl.certificate_authorities:
  - |
    -----BEGIN CERTIFICATE-----
    CERTIFICATE CONTENT APPEARS HERE
    -----END CERTIFICATE-----

ssl.key

(字符串) 用于客户端身份验证的客户端证书密钥。仅当配置 client_authentication 时才需要。

示例

ssl.key: "/path/to/cert.key"

指定路径,或将私钥直接嵌入到 YAML 配置中

ssl.key: |
    -----BEGIN PRIVATE KEY-----
    KEY CONTENT APPEARS HERE
    -----END PRIVATE KEY-----

ssl.key_passphrase

(字符串) 用于解密存储在配置的 key 文件中的加密密钥的密码。

ssl.verification _mode

(字符串) 控制服务器证书的验证。有效值如下

full
验证提供的证书是否由受信任的机构 (CA) 签名,并且还验证服务器的主机名(或 IP 地址)是否与证书中标识的名称匹配。
strict
验证提供的证书是否由受信任的机构 (CA) 签名,并且还验证服务器的主机名(或 IP 地址)是否与证书中标识的名称匹配。如果主题备用名称为空,则返回错误。
certificate
验证提供的证书是否由受信任的机构 (CA) 签名,但不执行任何主机名验证。
none
对服务器的证书执行不验证。此模式禁用了 SSL/TLS 的许多安全优势,应在谨慎考虑后使用。它主要用作尝试解决 TLS 错误时的临时诊断机制;强烈建议不要在生产环境中使用它。

默认值: full

ssl.ca_trusted _fingerprint

(字符串) CA 证书的十六进制编码 SHA-256。如果此证书在握手期间出现在链中,则会将其添加到 certificate_authorities 列表,并且握手将正常继续。

示例

ssl.ca_trusted_fingerprint: 3b24d33844d6553...826

表 9. 服务器配置选项

设置 描述

ssl.certificate

(字符串) 用于 SSL 服务器身份验证的证书路径。如果未指定证书,则启动将失败。

示例

ssl.certificate: "/path/to/server/cert.pem"

配置此设置后,还需要 key 设置。

指定路径,或将证书直接嵌入到 YAML 配置中

ssl.certificate: |
    -----BEGIN CERTIFICATE-----
    CERTIFICATE CONTENT APPEARS HERE
    -----END CERTIFICATE-----

ssl.certificate _authorities

(列表) 客户端验证的根证书列表,仅当配置 client_authentication 时才需要。如果 certificate_authorities 为空或未设置,并且配置了 client_authentication,则使用系统密钥库。如果 certificate_authorities 是自签名的,则主机系统也需要信任该 CA 证书。

示例

ssl.certificate_authorities: ["/path/to/root/ca.pem"]

指定 Elastic Agent 将读取的文件列表,或将证书直接嵌入到 YAML 配置中

ssl.certificate_authorities:
  - |
    -----BEGIN CERTIFICATE-----
    CERTIFICATE CONTENT APPEARS HERE
    -----END CERTIFICATE-----

ssl.client_ authentication

(字符串) 配置客户端身份验证。有效选项如下

none
禁用客户端身份验证。
optional
当提供客户端证书时,服务器将对其进行验证。
required
要求客户端提供有效的证书。

默认值: required (如果设置了 certificate_authorities);否则为 none

ssl.key

(字符串) 用于身份验证的服务器证书密钥(必需)。

示例

ssl.key: "/path/to/server/cert.key"

指定路径,或将私钥直接嵌入到 YAML 配置中

ssl.key: |
    -----BEGIN PRIVATE KEY-----
    KEY CONTENT APPEARS HERE
    -----END PRIVATE KEY-----

ssl.key_passphrase

(字符串) 用于解密存储在配置的 key 文件中的加密密钥的密码。

ssl.renegotiation

(字符串) 配置要支持的 TLS 重新协商类型。有效选项如下

never
禁用重新协商。
once
允许远程服务器每个连接请求重新协商一次。
freely
允许远程服务器重复请求重新协商。

默认值: never

ssl.verification _mode

(字符串) 控制客户端证书的验证。有效值如下

full
验证提供的证书是否由受信任的机构 (CA) 签名,并且还验证服务器的主机名(或 IP 地址)是否与证书中标识的名称匹配。
strict
验证提供的证书是否由受信任的机构 (CA) 签名,并且还验证服务器的主机名(或 IP 地址)是否与证书中标识的名称匹配。如果主题备用名称为空,则返回错误。
certificate
验证提供的证书是否由受信任的机构 (CA) 签名,但不执行任何主机名验证。
none
对服务器的证书执行不验证。此模式禁用了 SSL/TLS 的许多安全优势,应在谨慎考虑后使用。它主要用作尝试解决 TLS 错误时的临时诊断机制;强烈建议不要在生产环境中使用它。

默认值: full