为独立 Elastic Agent 配置 SSL/TLS

编辑

根据您是配置客户端、服务器还是两者兼而有之,可以使用多种 SSL 配置设置。请参见下表以了解可用的设置

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

表 7. 常见配置选项

设置 描述

ssl.ca_sha256

(字符串) 此配置一个证书固定,您可以使用它来确保特定证书是已验证链的一部分。

此固定是证书 SHA-256 的 base64 编码字符串。

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

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 服务器不支持任何指定的版本,则连接将在握手期间或之后断开。允许的协议版本列表包括:SSLv3TLSv1(对于 TLS 版本 1.0)、TLSv1.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
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-----

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

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

ssl.key_passphrase

ssl.renegotiation

(字符串) 配置要支持的 TLS 重新协商类型。有效选项为:
never
禁用重新协商。
once
允许远程服务器每次连接请求一次重新协商。
freely

允许远程服务器重复请求重新协商。

默认值: never

ssl.verification _mode

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

默认值: full