.NET Core跳过自签名证书验证

时间:2018-01-31 20:22:46

标签: .net-core identityserver4

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

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

但是这个代码在.NET Core中不起作用(即使它编译得很好),并且当API尝试通信时(特别是当它试图从身份服务器获取发现文档时,它会引起我的问​​题,这是反向代理后面,在此环境中,具有用于https的自签名证书。我见过similar questions on StackOverflow,但所有答案都与HttpClient的创建方式有关。对我来说问题是我无法控制如何创建HttpClient(令牌验证是中间件,我没有看到任何方法来控制它如何创建HttpClient),所以我想知道是否有全局方式在.NET Core中跳过自签名证书验证?

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

2 个答案:

答案 0 :(得分:7)

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

编辑:虽然可以跳过.NET Core中的证书验证,但我最终放弃了这种方法,因为找到具有HttpClient的所有组件并修改HttpClient以跳过证书验证变得过于繁琐。我最终采用的方法是使用easy-rsa创建CA,然后生成CA签名的证书。然后,唯一的步骤是将CA证书导入容器,并且他们将信任其他证书。它可能听起来很多,但easy-rsa命令界面相当直接,它真的不会那么费力。

答案 1 :(得分:1)

感谢@riqitang。

我在 asp.net core 5 中使用 IdentityServer自签名 证书时遇到了同样的问题。我经常在需要授权的地方遇到以下异常:

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://localhost:5443/.well-known/openid-configuration'.

最后在 ConfigureServices 方法中添加以下内容,解决了我的问题。

  services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
                .AddIdentityServerAuthentication(options =>
                {
                    ...
                    options.JwtBackChannelHandler = new HttpClientHandler
                    {
                        ServerCertificateCustomValidationCallback =
                              (message, certificate, chain, sslPolicyErrors) => true
                    };
                });