我有两个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的地方)和我的本地计算机(其中)的受信任根目录中容器正在运行)我仍然得到证书验证错误。
答案 0 :(得分:7)
我应该更仔细地查看JwtBearerOptions,结果我可以设置options.BackchannelHttpHandler
,例如:options.BackchannelHttpHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = delegate { return true; } };
- 现在它按预期工作。
答案 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
};
});