You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET Core 3.1中读取TLS扩展类型?

.NET Core 3.1读取自定义TLS扩展类型的实现方案

由于.NET Core 3.1的ITlsHandshakeFeature仅暴露了SNI、TLS协议版本等有限的握手信息,无法直接获取自定义TLS扩展,需要通过Kestrel的TLS认证回调来实现:

步骤1:配置Kestrel的TLS握手回调

在Startup.cs的ConfigureServices方法中,配置Kestrel的HTTPS选项,添加握手时的自定义处理逻辑,获取并保存扩展数据:

using Microsoft.AspNetCore.Server.Kestrel.Core;
using System.Threading.Tasks;

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<KestrelServerOptions>(options =>
    {
        options.ConfigureHttpsDefaults(httpsOptions =>
        {
            httpsOptions.OnAuthenticate = (context, sslOptions) =>
            {
                // 获取ClientHello阶段的握手信息
                var clientHelloInfo = context.Features.Get<SslClientHelloInfo>();
                if (clientHelloInfo != null)
                {
                    // 替换为第三方网关使用的自定义扩展类型编号(十六进制转十进制)
                    const int customExtensionType = 0xXXXX;
                    if (clientHelloInfo.Extensions.TryGetValue(customExtensionType, out byte[] extensionData))
                    {
                        // 将扩展数据存入上下文,供后续请求处理使用
                        context.Items["CustomTlsExtensionData"] = extensionData;
                    }
                }
                return Task.CompletedTask;
            };
        });
    });

    // 其他服务配置...
    services.AddControllersWithViews();
}

步骤2:在请求处理中读取扩展数据

在Controller或自定义中间件中,从HttpContext.Items中取出保存的扩展数据,根据网关约定解析:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        if (HttpContext.Items.TryGetValue("CustomTlsExtensionData", out object dataObj) && dataObj is byte[] extensionData)
        {
            // 示例:将字节数组转为UTF-8字符串,实际需根据网关的扩展格式解析
            string extensionValue = System.Text.Encoding.UTF8.GetString(extensionData);
            // 执行业务逻辑...
        }
        return View();
    }
}

注意事项

  • 必须明确第三方网关使用的自定义扩展类型编号(可参考IANA的TLS扩展类型列表,或网关提供的文档)
  • 扩展数据为原始字节数组,解析规则需与网关的扩展格式完全匹配(如是否有长度前缀、编码格式等)
  • 握手回调执行在TLS建立阶段,避免在此处执行耗时操作,影响连接建立效率

内容的提问来源于stack exchange,提问作者NeverEndingLearner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:03:16