仅特定路由或控制器需要 SSL 客户端证书

2023-12-21

我有一个使用 Kestrel 作为服务器的 ASP.NET MVC Core 项目。它既提供用户内容 (asp.net mvc),又托管与代理(软件)通信的 Web API 控制器。我已启用 HTTPS 和客户端证书支持。问题是我想要调用 Web API 的代理(软件)需要客户端证书,但我不想要求/提示基于常规浏览器的用户提供客户端证书。

我已通过以下方式启用 HTTPS/客户端证书支持:

var host = new WebHostBuilder()
.UseKestrel(options =>
{
    HttpsConnectionFilterOptions httpsoptions = new    HttpsConnectionFilterOptions();
    httpsoptions.ServerCertificate = CertUtil.GetServerCert();
    httpsoptions.ClientCertificateMode = ClientCertificateMode.AllowCertificate;
    httpsoptions.CheckCertificateRevocation = false;

    options.UseHttps(httpsoptions);
})
.UseUrls("http://0.0.0.0:5000", "https://0.0.0.0:5001")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.Run();

我在 Startup.cs 中有一个单独的中间件处理程序设置来处理客户端证书的自定义验证。这段代码确实成功执行,从这个意义上讲,一切都工作正常。

问题是这种情况在全球范围内发生,我只想将客户端证书应用于特定的控制器和/或路由;或者说我现在确实会采取任何粒度。

本质上,尝试创建与 IIS 中相同的行为,方法是创建两个虚拟目录,然后将 SSL 设置设置为在其中一个目录上接受,在另一个目录上将 SSL 设置为忽略。带有“接受”的将提示浏览器输入证书,而带有“忽略”的则不会。

我尝试将 HttpsConnectionFilterOptions 设置为仅指定 ServerCertificate,希望不设置任何客户端证书相关选项将允许服务器接收客户端证书(如果发送),但不会提示浏览器提供它们。这似乎不起作用,因为我的中间件客户端证书处理程序在调用此函数时从未看到客户端证书(当 ClientCertificateMode 设置为 AllowCertificate 时会看到客户端证书)。

context.Connection.GetClientCertificateAsync();

我想简而言之,Kestrel 托管是否允许更精细的客户端证书映射/处理,还是只能使用 IIS? IIS 不是该项目的选项,我宁愿不必仅为客户端证书 api 方面创建单独的项目/进程。感谢任何帮助!


我一直在尝试做同样的事情,与你的要求完全相同。

我得出的结论是这是不可能的。我的解决方法是使用2 WebHostBuilder对象 - 一个用于位置don't需要客户证书,并且需要一个适合那些do。这确实有一个缺点,即每个IWebHost必须侦听不同的端口,但从您描述的场景来看,我想这不是一个大问题。

我在同一流程中执行此操作,因此该解决方案符合该要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅特定路由或控制器需要 SSL 客户端证书 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 如何在 iOS 15 Xcode 13 中将 TabView tabItem 上的填充图标更改为不填充?

    如何将 iOS 15 Xcode 13 中的 TabView tabItem 上的填充图标更改为不填充 现在看来图标是默认填充的 我的代码 import SwiftUI struct Test Home V View var body so
  • Promise.catch() 在 AngularJS 单元测试中没有捕获异常

    我正在 Typescript 中为我的应用程序编写 Jasmine 单元测试 并通过 Resharper 运行它们 如果处理程序抛出异常 它应该执行一个操作 describe Q Service Test gt var q ng IQSer
  • 边缘会话.cookie_lifetime

    我的网站功能在 Edge 上损坏 尤其是登录 有人告诉我这与session cookie lifetime 对于此事的任何帮助 我将不胜感激 请注意 我不是开发人员 没有任何代码知识 我的一些 php ini 文件 如果有帮助的话 sess
  • 查找上个月

    我见过一些使用的方法dateutil模块来执行此操作 但是有没有一种方法可以在不使用内置库的情况下执行此操作 例如 当前月份是七月 我可以使用datetime now 功能 python 返回上个月的最简单方法是什么 这很简单 gt gt
  • 是否可以在函数内使用 Excel 数组中的单个单元格引用?

    我有一些数据想要放入 LOGEST 函数中 e g x values 0 463 0 609 0 887 y values 0 05 0 1 0 2 For this example I have put the data into the
  • asyncio 和 trio 之间的核心区别是什么?

    今天 我发现了一个名为trio http trio readthedocs io en latest index html它说它自己是一个供人类使用的异步 API 这些词有点相似requests As requests确实是一个不错的库 我
  • 如何在队列上设置 ActiveMQ redeliveryPolicy?

    如何在队列上的 ActiveMQ 中设置 redeliveryPolicy 1 在文档中 请参阅 activeMQ 重新传送 http activemq apache org redelivery policy html 说明您应该在 Co
  • 如何使用 Microsoft.Graph 将文件附加到 Sharepoint 中的项目

    Microsoft Graph Sharepoint api 允许更新列表项https developer microsoft com en us graph docs api reference beta api listitem upd
  • 1 和 0 的大字符串到 BitSet

    我有一个非常大的字符串 64 个字符 其中包含 1 和 0 样本 1001111111101010011101101011100101001010111000101111011110001000 我想要的只是将其转换为 BitSet var
  • 丰富 SparkContext 而不会引发序列化问题

    我正在尝试使用 Spark 处理来自 HBase 表的数据 这篇博文 http www vidyasource com blog Programming Scala Java Data Hadoop Analytics 2014 01 25
  • 在 Ubuntu 18.10 上安装 ROS Melodic

    I can t是唯一对 Cosmic 与 Wayland 和 Melodic 的组合感兴趣的人 我会坦白说 我似乎已经在 XPS 13 9370 上成功管理了此操作 或者至少安装脚本 最终 成功完成 然而 有一个非常棘手的解决方法 无论结果
  • 当 debug == 0 时如何手动刷新模型缓存?

    每当我在 CakePHP 站点的生产版本上对数据库进行更改 其中调试设置为 0 时 这些更改都不会反映出来 我知道我可以通过暂时将 debug 更改为 2 来解决此问题 但是当大量人访问此站点时 这似乎不安全 我查看了缓存文件 但由于尚无相
  • VS Code 中的 Node.js TypeScript 调试

    有人可以提供 VS Code 配置的示例吗 它允许我 启动 Node js 调试器 编辑任何 TS 文件 看到项目重新编译并重新启动调试器吗 这是开箱即用的支持吗 能nodemon以某种方式被使用 谢谢 是的 您可以使用nodemon 在您
  • 如何加载 ace 编辑器

    我正在尝试使用 Ace 代码编辑器库 http ace ajax org http ace ajax org 但我遇到了麻烦 根据嵌入指南 这应该从 Amazon CDN 加载所需的 js 文件 然而它失败了 在 Chrome 控制台中显示
  • 通过智能 HTTP 推送到 Git 共享存储库的权限不足

    我正在尝试为我们的团队评估 git 要求之一是使用 HTTPS 作为传输方法 我一直在努力遵循git http 后端 http www kernel org pub software scm git docs git http backen
  • 交互式保存文件?

    Using tk choose files or file choose我能够交互式地选择一个文件 是否有一个类似的函数 我可以允许用户交互地决定在哪里保存 write table 的输出 在 Windows 7 上并通过 RGUI 工作
  • 将 MediaElement 绑定到 WPF 中的滑块位置

    尝试将滑块的最大值绑定到媒体元素的持续时间并将滑块的当前值绑定到媒体元素的位置 但由于某些原因它没有 我希望滑块在视频播放时移动拇指
  • ReferenceError:使用 Performance.now() 时未定义性能

    我收到错误ReferenceError performance is not defined当尝试使用时性能 now https developer mozilla org en US docs Web API Performance no
  • Kafka AVRO - 从长时间到日期时间的转换

    当我想要发送包含 long 类型字段的 AVRO 消息时 出现以下错误 Caused by org apache kafka common errors SerializationException Error deserializing
  • 仅特定路由或控制器需要 SSL 客户端证书

    我有一个使用 Kestrel 作为服务器的 ASP NET MVC Core 项目 它既提供用户内容 asp net mvc 又托管与代理 软件 通信的 Web API 控制器 我已启用 HTTPS 和客户端证书支持 问题是我想要调用 We