.NET Core JWTBearer 跳过与身份服务器进行本地通信的自签名证书验证
.NET Core JWTBearer skip self-signed certificate validation for local communication with identity server
我有两个 API 项目,一个基于 .NET Framework 4.6.2(旧的 API),另一个基于 .NET Core 2.0。旧的 API 可以非常简单地禁用自签名证书验证:
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
但是这段代码在 .NET Core 中不起作用(即使它编译得很好),并且当 API 尝试通信时(特别是当它试图从身份服务器,位于反向代理之后,在此环境中,反向代理具有用于 https 的自签名证书)。我看过 但所有答案都与 HttpClient 的创建方式有关。我的问题是我无法控制 HttpClient 的创建方式(令牌验证是中间件,我看不到任何方式来控制它如何创建 HttpClient),所以我想知道是否有全局方式在 .NET Core 中跳过自签名证书验证?
编辑:我的问题似乎与 this issue 密切相关,但是我已经采用自签名证书并将其加载到两个容器的受信任根中(其中 api 是 运行) 和我的本地机器(容器是 运行),但我仍然收到证书验证错误。
我应该更仔细地查看 JwtBearerOptions,结果我可以设置 options.BackchannelHttpHandler
,例如:options.BackchannelHttpHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = delegate { return true; } };
- 现在它按预期工作。
编辑:虽然可以在 .NET Core 中跳过证书验证,但我最终放弃了这种方法,因为查找所有具有 HttpClient 的组件并修改 HttpClient 以跳过证书验证变得太麻烦了。我最终采用的方法是使用 easy-rsa 创建一个 CA,然后生成由 CA 签名的证书。然后唯一的步骤是将 CA 证书导入容器,它们将信任其他证书。听起来可能很多,但 easy-rsa 命令界面相当简单,实际上并没有那么费力。
感谢@riqitang
我在 asp.net core 5 中使用 IdentityServer 和 self-signed 证书时遇到同样的问题。我经常在需要授权的地方遇到以下异常:
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
};
});
我有两个 API 项目,一个基于 .NET Framework 4.6.2(旧的 API),另一个基于 .NET Core 2.0。旧的 API 可以非常简单地禁用自签名证书验证:
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
但是这段代码在 .NET Core 中不起作用(即使它编译得很好),并且当 API 尝试通信时(特别是当它试图从身份服务器,位于反向代理之后,在此环境中,反向代理具有用于 https 的自签名证书)。我看过
编辑:我的问题似乎与 this issue 密切相关,但是我已经采用自签名证书并将其加载到两个容器的受信任根中(其中 api 是 运行) 和我的本地机器(容器是 运行),但我仍然收到证书验证错误。
我应该更仔细地查看 JwtBearerOptions,结果我可以设置 options.BackchannelHttpHandler
,例如:options.BackchannelHttpHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = delegate { return true; } };
- 现在它按预期工作。
编辑:虽然可以在 .NET Core 中跳过证书验证,但我最终放弃了这种方法,因为查找所有具有 HttpClient 的组件并修改 HttpClient 以跳过证书验证变得太麻烦了。我最终采用的方法是使用 easy-rsa 创建一个 CA,然后生成由 CA 签名的证书。然后唯一的步骤是将 CA 证书导入容器,它们将信任其他证书。听起来可能很多,但 easy-rsa 命令界面相当简单,实际上并没有那么费力。
感谢@riqitang
我在 asp.net core 5 中使用 IdentityServer 和 self-signed 证书时遇到同样的问题。我经常在需要授权的地方遇到以下异常:
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
};
});