c# - 忽略 ASP.NET Core 3.1 中的 WCF 证书错误
问题描述
我有这样的解决方案:
-MySolution
|--MyWCFWrapper
|--MyaspnetcoreWebApp
|--ConsoleTestApp
MyWCFWrapper
是一个 .NET Standard 库,使用 Visual Studio 导入向导作为 WCF 引用添加的 WCF 服务。
该MyaspnetcoreWebApp
应用程序提供控制器供前端使用。在这个控制器中,我正在实例化并调用MyWCFWrapper
库。
这ConsoleTestApp
是一个控制台应用程序,它还调用MyWCFWrapper
库进行测试。
我收到一个错误:
System.ServiceModel.Security.SecurityNegotiationException:“无法为具有权限‘exampleabc.com’的 SSL/TLS 安全通道建立信任关系”
当我进行 WCF 服务调用时。
出现此错误的原因是我在 exampleablc.com 上的 WCF 服务是一个测试服务器,并且具有自签名证书(名称与 Web 服务不同)并且也已过期。
适用于 ConsoleTestApp 的解决方法:
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
(se, cert, chain, sslerror) =>
{
return true;
};
MyWCFWrapperClass api = new MyWCFWrapperClass(..);
api.SendNewInfo("NewInfo");
不推荐这样做,但现在对我来说还可以,因为它是一个测试服务器。
相同的解决方法在 MyaspnetcoreWebApp 控制器中不起作用。我试图让它发挥作用:.
- 在
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient("SeitaCertificate").ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = (request, certificate, certificateChain, policy) =>
{
return true;
}
};
});
services.AddControllersWithViews();
----
}
- 在我的本地 PC 上将证书添加到受信任的根证书颁发机构。这可能是因为证书已过期而失败。
WCF 调用库中引发了证书错误,我无法找到忽略证书错误的方法。我能做的至少是更新证书以使其不会过期。(我已经开始了这个过程,可能需要一些时间)
我想学习一种方法,如何有选择地并适当地捕获和忽略这些证书错误,以便在 asp .net core 3.1 Web 应用程序中调用 WCF 库。我怎样才能做到这一点?
解决方案
您可以参考以下代码绕过证书验证:
BasicHttpsBinding binding = new BasicHttpsBinding();
binding.Security.Mode = BasicHttpsSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
ChannelFactory<IService> factory = new ChannelFactory<IService>(binding, new EndpointAddress(uri));
factory.Credentials.ServiceCertificate.SslCertificateAuthentication = new System.ServiceModel.Security.X509ServiceCertificateAuthentication()
{
CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None,
RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck
};
推荐阅读
- javascript - 执行另一个函数时 Websocket 事件侦听器被锁定
- python - 有没有办法在 django 模板中使用“和”来检查 2 个变量?
- android - textStyle="bold" 在 DialogFragment 中不起作用
- azure-functions - 一个 Cosmos DB 分区中的更改将转到多个 Azure 函数实例
- r - 快速导入多个 txt 文件,处理空行并在 R 中的表中包含文件名
- loops - Asm Assembler - CX 循环从不执行
- javascript - 如何强制 Nextjs 为特定模块创建一个块?
- php - 调用未定义的方法 MongoDB::update()
- php - 使用 PHP 从 xml 文件中提取一些 CDATA
- asp.net - 我收到一条我无法修复的错误消息