.NET Core JWTBearer跳过自签名证书验证,以与身份服务器进行本地通信

riq*_*ang 5 .net-core identityserver4 asp.net-core-webapi

我有两个API项目,一个基于.NET Framework 4.6.2(旧的API),另一个基于.NET Core 2.0。旧的API可以非常简单地禁用自签名证书验证:

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Run Code Online (Sandbox Code Playgroud)

但是,此代码在.NET Core中不起作用(即使它可以很好地编译),并且在API尝试进行通信时(尤其是在尝试从身份服务器获取发现文档时)引起了我的问题,这是相反的代理,在此环境中,该代理具有用于https的自签名证书)。我在StackOverflow上看到过类似的问题,但所有答案都与HttpClient的创建方式有关。对我来说,问题是我无法控制HttpClient的创建方式(令牌验证是中间件,我看不到任何方法来控制其创建HttpClient的方式),所以我想知道是否存在全局方法在.NET Core中跳过自签名证书验证?

编辑:我的问题似乎与此问题密切相关,但是我已经采取了自签名证书,并将其加载到了容器(运行api的地方)和我的本地计算机(容器正在运行的地方)的受信任根目录中,并且我仍然收到证书验证错误。

riq*_*ang 9

我应该更仔细地看一下JwtBearerOptions,事实证明我可以设置options.BackchannelHttpHandler,例如:options.BackchannelHttpHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = delegate { return true; } };-现在它按预期工作了。

编辑:尽管可以在.NET Core中跳过证书验证,但我最终放弃了这种方法,因为它变得太麻烦了,以至于找不到具有HttpClient的所有组件并修改HttpClient以跳过证书验证。我最终采用的方法是使用easy-rsa创建一个CA ,然后生成由CA签名的证书。然后,唯一的步骤是将CA证书导入到容器中,它们将信任其他证书。听起来可能很多,但是easy-rsa命令界面非常简单明了,而且实际上并不需要付出太多努力。