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 是特定于服务器的。 有关配置详细信息,请查看 Kestrel、IIS的文档,并 Http.Sys。
使用 Kestrel 的高级 TLS 筛选器
Kestrel 支持在 TLS 握手之前截获传入连接。 YARP 包括一个名为 TlsFrameHelper 的 API,它可以解析原始 TLS 握手,使您能够收集自定义遥测数据或主动拒绝连接。 这些 API 无法修改 TLS 握手或解密数据流。 请参阅此 示例。
配置传出连接
若要在与目标通信时启用 TLS 加密,请将目标地址指定为 https
,例如 "https://destinationHost"
。 有关示例,请参阅 配置文档。
默认情况下,目标地址中指定的主机名将用于 TLS 握手,包括 SNI 和服务器证书验证。 如果启用了 原始主机标头 代理,则该值将改为用于 TLS 握手。 如果需要使用自定义主机值,请使用 RequestHeader 转换来设置主机标头。
到目标的出站连接由 HttpClient/SocketsHttpHandler 处理。 可以为每个群集配置不同的实例和设置。 某些设置在配置模型中可用,而其他设置只能在代码中配置。 有关详细信息,请参阅 HttpClient 文档。
信任目标服务器证书需要通过代理或通过 HttpClient 配置应用自定义验证。