YARP HTTPS & TLS

HTTPS(HTTP over TLS 加密连接)是出于安全、完整性和隐私原因在 Internet 上发出 HTTP 请求的标准方法。 使用反向代理(如 YARP)时,需要考虑几个 HTTPS/TLS 注意事项。

TLS 终止

YARP 是一个级别 7 HTTP 代理,这意味着传入的 HTTPS/TLS 连接由代理完全解密,以便它可以处理和转发 HTTP 请求。 这通常称为 TLS 终止。 与目标的传出连接是否加密,取决于所提供的配置。

TLS 隧道(连接)

使用 CONNECT 方法的 TLS 隧道是一项功能,用于代理请求,而无需解密它们。 这是 YARP 不支持,也没有计划添加它。

配置传入连接

YARP 可以在所有 ASP.NET Core 服务器上运行,并且为传入连接配置 HTTPS/TLS 是特定于服务器的。 有关配置详细信息,请查看 KestrelIIS的文档,并 Http.Sys

使用 Kestrel 的高级 TLS 筛选器

Kestrel 支持在 TLS 握手之前截获传入连接。 YARP 包括一个名为 TlsFrameHelper 的 API,它可以解析原始 TLS 握手,使您能够收集自定义遥测数据或主动拒绝连接。 这些 API 无法修改 TLS 握手或解密数据流。 请参阅此 示例

配置传出连接

若要在与目标通信时启用 TLS 加密,请将目标地址指定为 https,例如 "https://destinationHost"。 有关示例,请参阅 配置文档

默认情况下,目标地址中指定的主机名将用于 TLS 握手,包括 SNI 和服务器证书验证。 如果启用了 原始主机标头 代理,则该值将改为用于 TLS 握手。 如果需要使用自定义主机值,请使用 RequestHeader 转换来设置主机标头。

到目标的出站连接由 HttpClient/SocketsHttpHandler 处理。 可以为每个群集配置不同的实例和设置。 某些设置在配置模型中可用,而其他设置只能在代码中配置。 有关详细信息,请参阅 HttpClient 文档。

信任目标服务器证书需要通过代理或通过 HttpClient 配置应用自定义验证。