菜单
开源

http 块

http 是一个可选的配置块,用于自定义 Alloy HTTP 服务器的功能。http 没有标签,每个配置文件只能提供一次。

示例

alloy
http {
  tls {
    cert_file = sys.env("TLS_CERT_FILE_PATH")
    key_file  = sys.env("TLS_KEY_FILE_PATH")
  }
}

参数

http 块不支持任何参数,完全通过内部块进行配置。

http 定义中支持以下块

层级描述必需
tlstls定义 HTTP 服务器的 TLS 设置。
tls > windows_certificate_filterwindows_certificate_filter配置 Windows 证书存储以获取所有证书。
tls > windows_certificate_filter > clientclient为 Windows 证书过滤器配置客户端证书。
tls > windows_certificate_filter > serverserver为 Windows 证书过滤器配置服务器证书。

tls 块

tls 块配置 HTTP 服务器的 TLS 设置。

警告

如果您添加 tls 块并在 Alloy 运行时重新加载配置,现有连接将继续使用明文通信。同样,如果您删除 tls 块并在 Alloy 运行时重新加载配置,现有连接将继续使用 TLS 通信。

为确保所有连接都使用 TLS,请在启动 Alloy 之前配置 tls 块。

名称类型描述默认值必需
cert_pemstring服务器 TLS 证书的 PEM 数据。""有条件的
cert_filestring磁盘上服务器 TLS 证书的路径。""有条件的
key_pemstring服务器 TLS 密钥的 PEM 数据。""有条件的
key_filestring磁盘上服务器 TLS 密钥的路径。""有条件的
client_ca_pemstring用于验证请求的客户端 CA 的 PEM 数据。""
client_ca_filestring磁盘上用于验证请求的客户端 CA 文件的路径。""
client_auth_typestring使用的客户端认证类型。"NoClientCert"
cipher_suiteslist(string)使用的密码套件集合。[]
curve_preferenceslist(string)握手中使用的椭圆曲线集合。[]
min_versionstring接受客户端连接的最低 TLS 版本。""
max_versionstring接受客户端连接的最高 TLS 版本。""

指定 tls 块时,需要提供 TLS 证书(使用 cert_pemcert_file)和 TLS 密钥(使用 key_pemkey_file)的参数。

以下参数对互斥,一次只能配置其中一个

  • cert_pemcert_file
  • key_pemkey_file
  • client_ca_pemclient_ca_file

client_auth_type 参数决定是否验证客户端证书。默认值 NoClientCert 表示不验证客户端证书。client_ca_pemclient_ca_file 参数只能在 client_auth_type 不是 NoClientCert 时配置。

client_auth_type 接受以下值

  • NoClientCert: 既不请求也不验证客户端证书。
  • RequestClientCert: 请求客户端发送可选证书。客户端提供的证书不被验证。
  • RequireAnyClientCert: 要求客户端至少提供一个证书。客户端提供的证书不被验证。
  • VerifyClientCertIfGiven: 请求客户端发送可选证书。如果发送了证书,则必须有效。
  • RequireAndVerifyClientCert: 要求客户端发送有效证书。

可以使用 client_ca_pemclient_ca_file 参数执行客户端证书验证。这些参数只能在 client_auth_type 未设置为 NoClientCert 时提供。

cipher_suites 参数决定使用哪些密码套件。如果您不提供密码套件,将使用默认列表。指定的密码套件集合可以来自以下列表

密码套件允许用于 BoringCrypto 构建
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256

curve_preferences 参数决定在握手期间优先使用的椭圆曲线集合,按偏好顺序排列。如果未提供,将使用默认列表。指定的椭圆曲线集合可以来自以下列表

曲线允许用于 BoringCrypto 构建
CurveP256
CurveP384
CurveP521
X25519

min_versionmax_version 参数决定客户端连接可接受的最低和最高 TLS 版本。如果您不提供最低和最高 TLS 版本,将使用默认值。

识别以下版本

  • TLS13 代表 TLS 1.3
  • TLS12 代表 TLS 1.2
  • TLS11 代表 TLS 1.1
  • TLS10 代表 TLS 1.0

windows certificate filter 块

windows_certificate_filter 块用于配置从内置 Windows 证书存储中检索证书。当使用 windows_certificate_filter 块时,以下 TLS 设置将被覆盖,如果定义了它们将导致错误。

  • cert_pem
  • cert_file
  • key_pem
  • key_file
  • client_ca
  • client_ca_file

警告

此功能仅在 Windows 上可用。

TLS 最低和最高版本可能与存储在 Windows 证书存储中的证书不兼容。即使证书与指定的 TLS 版本不兼容,windows_certificate_filter 也会提供证书。

server 块

server 块用于查找要检查签名者的证书。如果找到多个证书,windows_certificate_filter 将选择到期日期最远的证书。

名称类型描述默认值必需
storestring查找服务器证书的存储名称。例如,MYCA""
system_storestring查找服务器证书的系统存储名称。例如,LocalMachineCurrentUser""
issuer_common_nameslist(string)要对照检查的颁发者通用名。
refresh_intervalstring检查新服务器证书的频率。"5m"
template_idstring要匹配的服务器模板 ID,ASN1 格式,例如 “1.2.3”。""

client 块

client 块用于检查提供给服务器的证书。

名称类型描述默认值必需
issuer_common_nameslist(string)要对照检查的颁发者通用名。
subject_regexstring用于匹配 Subject 名称的正则表达式。""
template_idstring要匹配的客户端模板 ID,ASN1 格式,例如 “1.2.3”。""