TLS 传输套接字(proto)

此扩展的限定名称为 envoy.transport_sockets.tls

注意

此扩展旨在对不可信的下游和上游流量都具有鲁棒性。

以下 TLS 上下文提供上游/下游 TLS 的传输套接字配置。

extensions.transport_sockets.tls.v3.UpstreamTlsContext

[extensions.transport_sockets.tls.v3.UpstreamTlsContext proto]

{
  "common_tls_context": {...},
  "sni": ...,
  "allow_renegotiation": ...,
  "max_session_keys": {...},
  "enforce_rsa_key_usage": {...}
}
common_tls_context

(extensions.transport_sockets.tls.v3.CommonTlsContext) 通用 TLS 上下文设置。

注意

默认情况下不会启用服务器证书验证。配置 trusted_ca 以启用验证。

sni

(string) 创建 TLS 后端连接时要使用的 SNI 字符串。

allow_renegotiation

(bool) 如果为 true,则允许服务器发起的 TLS 重新协商。

注意

TLS 重新协商被认为是不安全的,除非绝对必要,否则不应使用。

max_session_keys

(UInt32Value) 为会话恢复目的存储的会话密钥(TLSv1.3+ 的预共享密钥、TLSv1.2 及更早版本的会话 ID 和会话票证)的最大数量。

默认为 1,将其设置为 0 将禁用会话恢复。

enforce_rsa_key_usage

(BoolValue) 此字段用于控制执行,如果存在 keyUsage 扩展且与 TLS 用法不兼容,则握手将失败。当前,默认值为 false(即,执行关闭),但预计将在将来的版本中默认更改为 true。 ssl.was_key_usage_invalid侦听器指标 中将为如果此选项设置为 true 则会失败的证书配置设置。

extensions.transport_sockets.tls.v3.DownstreamTlsContext

[extensions.transport_sockets.tls.v3.DownstreamTlsContext proto]

{
  "common_tls_context": {...},
  "require_client_certificate": {...},
  "session_ticket_keys": {...},
  "session_ticket_keys_sds_secret_config": {...},
  "disable_stateless_session_resumption": ...,
  "disable_stateful_session_resumption": ...,
  "session_timeout": {...},
  "ocsp_staple_policy": ...,
  "full_scan_certs_on_sni_mismatch": {...},
  "prefer_client_ciphers": ...
}
common_tls_context

(extensions.transport_sockets.tls.v3.CommonTlsContext) 通用 TLS 上下文设置。

require_client_certificate

(BoolValue) 如果指定,Envoy 将拒绝没有有效客户端证书的连接。

session_ticket_keys

(extensions.transport_sockets.tls.v3.TlsSessionTicketKeys) TLS 会话票证密钥设置。

只能设置 session_ticket_keyssession_ticket_keys_sds_secret_configdisable_stateless_session_resumption 中的一个。

session_ticket_keys_sds_secret_config

(extensions.transport_sockets.tls.v3.SdsSecretConfig) 通过 SDS API 获取 TLS 会话票证密钥的配置。

只能设置 session_ticket_keyssession_ticket_keys_sds_secret_configdisable_stateless_session_resumption 中的一个。

disable_stateless_session_resumption

(bool) 用于控制无状态 TLS 会话恢复的配置:将其设置为 true 将导致 TLS 服务器不会为无状态 TLS 会话恢复目的发出 TLS 会话票证。如果设置为 false,TLS 服务器将发出 TLS 会话票证,并使用通过 session_ticket_keyssession_ticket_keys_sds_secret_config 指定的密钥对其进行加密/解密。如果此配置设置为 false 且没有明确配置任何密钥,则 TLS 服务器将发出 TLS 会话票证,并使用内部生成的和管理的密钥对其进行加密/解密,这意味着会话无法跨热重启或在不同的主机上恢复。

只能设置 session_ticket_keyssession_ticket_keys_sds_secret_configdisable_stateless_session_resumption 中的一个。

disable_stateful_session_resumption

(bool) 如果设置为 true,TLS 服务器将不维护 TLS 会话的会话缓存。(这仅与 TLSv1.2 及更早版本相关。)

session_timeout

(Duration) 如果指定,session_timeout 将更改 TLS 会话的最大生命周期(以秒为单位)。目前,此值用作 TLS 会话票证生命周期(对于 TLSv1.2) 的提示。只能指定秒(忽略小数秒)。

ocsp_staple_policy

(extensions.transport_sockets.tls.v3.DownstreamTlsContext.OcspStaplePolicy) 用于配置在证书没有附带的 OCSP 响应或响应在运行时到期时是否使用证书的配置。默认为 LENIENT_STAPLING

full_scan_certs_on_sni_mismatch

(BoolValue) 下游传输套接字中允许存在多个证书以服务不同的 SNI。如果客户端提供 SNI 但没有匹配的证书,它将根据此配置决定是否进行完整的证书扫描。默认为 false。有关更多详细信息,请参阅 多个 TLS 证书

prefer_client_ciphers

(bool) 默认情况下,Envoy 作为服务器在握手过程中使用其首选密码。将其设置为 true 将允许使用下游客户端的首选密码。使用 TLSv1_3 时无效。

枚举 extensions.transport_sockets.tls.v3.DownstreamTlsContext.OcspStaplePolicy

[extensions.transport_sockets.tls.v3.DownstreamTlsContext.OcspStaplePolicy proto]

LENIENT_STAPLING

(默认) ⁣OCSP 响应是可选的。如果缺少 OCSP 响应或响应已过期,则关联的证书将用于没有 OCSP 钉扎的连接。

STRICT_STAPLING

⁣OCSP 响应是可选的。如果缺少 OCSP 响应,则关联的证书将用于没有 OCSP 钉扎的连接。如果提供了响应但已过期,则关联的证书将不会用于后续连接。如果未找到合适的证书,则拒绝连接。

MUST_STAPLE

⁣OCSP 响应是必需的。如果提供的证书没有 OCSP 响应,配置将失败。如果响应过期,则关联的证书将不会用于连接。如果未找到合适的证书,则拒绝连接。

extensions.transport_sockets.tls.v3.TlsKeyLog

[extensions.transport_sockets.tls.v3.TlsKeyLog proto]

TLS 密钥日志配置。密钥日志文件格式为“NSS 用于其 SSLKEYLOGFILE 调试输出的格式”(文本取自 openssl 手册页)

{
  "path": ...,
  "local_address_range": [],
  "remote_address_range": []
}
path

(string, 必需) 保存 TLS 密钥日志的路径。

local_address_range

(重复 config.core.v3.CidrRange) 将用于过滤应保存 TLS 密钥日志的连接的本地 IP 地址 如果未设置,则匹配任何本地 IP 地址。

remote_address_range

(重复 config.core.v3.CidrRange) 将用于过滤应保存 TLS 密钥日志的连接的远程 IP 地址 如果未设置,则匹配任何远程 IP 地址。

extensions.transport_sockets.tls.v3.CommonTlsContext

[extensions.transport_sockets.tls.v3.CommonTlsContext proto]

客户端和服务器 TLS 上下文共享的 TLS 上下文。

{
  "tls_params": {...},
  "tls_certificates": [],
  "tls_certificate_sds_secret_configs": [],
  "custom_tls_certificate_selector": {...},
  "validation_context": {...},
  "validation_context_sds_secret_config": {...},
  "combined_validation_context": {...},
  "alpn_protocols": [],
  "custom_handshaker": {...},
  "key_log": {...}
}
tls_params

(extensions.transport_sockets.tls.v3.TlsParameters) TLS 协议版本、密码套件等。

tls_certificates

(重复 extensions.transport_sockets.tls.v3.TlsCertificate) 客户端上下文中仅支持单个 TLS 证书。在服务器上下文中,多个 TLS 证书 可以与同一个上下文关联,以允许 RSA 和 ECDSA 证书以及支持基于 SNI 的选择。

如果设置了 tls_certificate_provider_instance,则忽略此字段。如果设置了此字段,则忽略 tls_certificate_sds_secret_configs

tls_certificate_sds_secret_configs

(重复 extensions.transport_sockets.tls.v3.SdsSecretConfig) 通过 SDS API 获取 TLS 证书的配置。请注意,SDS API 允许在网络上异步获取/刷新证书,而不受 TLS 握手的影响。

通过此设置获取的证书中,证书的数量和类型应与 tls_certificates 相同。

如果设置了 tls_certificatestls_certificate_provider_instance,则忽略此字段。

custom_tls_certificate_selector

(config.core.v3.TypedExtensionConfig) 自定义 TLS 证书选择器。

根据 TLS 客户端问候语选择 TLS 证书。如果为空,则默认使用本机 TLS 证书选择行为:从 TLS 证书中的 DNS SAN 或主题通用名称中提取服务器名称模式以匹配 SNI。

validation_context

(extensions.transport_sockets.tls.v3.CertificateValidationContext) 如何验证对等证书。

只能设置 validation_contextvalidation_context_sds_secret_configcombined_validation_context 中的一个。

validation_context_sds_secret_config

(extensions.transport_sockets.tls.v3.SdsSecretConfig) 通过 SDS API 获取验证上下文配置。请注意,SDS API 允许在网络上异步获取/刷新证书,而不受 TLS 握手的影响。

只能设置 validation_contextvalidation_context_sds_secret_configcombined_validation_context 中的一个。

combined_validation_context

(extensions.transport_sockets.tls.v3.CommonTlsContext.CombinedCertificateValidationContext) 结合证书验证上下文包含默认证书验证上下文和 SDS 配置。当 SDS 服务器返回动态证书验证上下文时,动态证书验证上下文和默认证书验证上下文将合并为一个新的证书验证上下文用于验证。此合并通过 Message::MergeFrom() 完成,因此动态证书验证上下文会覆盖默认证书验证上下文中的单一字段,将重复字段连接到默认证书验证上下文,并对布尔字段应用逻辑 OR 操作。

只能设置 validation_contextvalidation_context_sds_secret_configcombined_validation_context 中的一个。

alpn_protocols

(重复 string) 提供监听器应公开的 ALPN 协议列表。在实践中,这很可能设置为以下两个值之一(有关详细信息,请参见 HTTP 连接管理器中的 codec_type 参数)

  • “h2,http/1.1” 如果监听器将同时支持 HTTP/2 和 HTTP/1.1。

  • “http/1.1” 如果监听器仅将支持 HTTP/1.1。

此参数没有默认值。如果为空,Envoy 将不会公开 ALPN。

custom_handshaker

(config.core.v3.TypedExtensionConfig) 自定义 TLS 握手器。如果为空,则默认使用本机 TLS 握手行为。

key_log

(extensions.transport_sockets.tls.v3.TlsKeyLog) TLS 密钥日志配置

extensions.transport_sockets.tls.v3.CommonTlsContext.CombinedCertificateValidationContext

[extensions.transport_sockets.tls.v3.CommonTlsContext.CombinedCertificateValidationContext proto]

{
  "default_validation_context": {...},
  "validation_context_sds_secret_config": {...}
}
default_validation_context

(extensions.transport_sockets.tls.v3.CertificateValidationContext, REQUIRED) 如何验证对等证书。

validation_context_sds_secret_config

(extensions.transport_sockets.tls.v3.SdsSecretConfig, REQUIRED) 通过 SDS API 获取验证上下文配置。请注意,SDS API 允许在网络上异步获取/刷新证书,而不受 TLS 握手的影响。