我正在试图找出ASP.NETCore6和RabbitMQ通过SSL/TLS通信的问题。
当我使用相同的代码进行RabbitMQ与控制台应用程序的通信时,它正在工作。
当我尝试在F5的VS2022所在的机器上运行ASP.NETCore中的相同代码时,它也在工作。
但是当我在IIS机器上运行它时,它会出现下面的错误。
- 证书位于
wwwroot
文件夹中 - 文件夹具有"everyone"权限
- 证书是自签名的私有证书
ConnectionFactory factory = new ConnectionFactory();
factory.HostName = "129001-01";
factory.RequestedHeartbeat = heartbeat;
factory.AutomaticRecoveryEnabled = true;
factory.UserName = "";
factory.Password = "";
factory.VirtualHost = "/";
factory.AuthMechanisms = new IAuthMechanismFactory[] { new ExternalMechanismFactory() };
System.Diagnostics.Debug.WriteLine("2 ");
// SSL Certification
X509Certificate2Collection certCollection = new X509Certificate2Collection();
string certificateName = "CART1290213.A000.pfx";
X509Certificate2 certificate = new X509Certificate2(certificatePath + certificateName, certificatePassword);
certCollection.Add(certificate);
factory.Ssl.Certs = certCollection;
factory.Ssl.Enabled = true;
factory.Ssl.ServerName = "129001-01";
factory.Ssl.Version = SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13;
factory.Ssl.AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNotAvailable | SslPolicyErrors.RemoteCertificateNameMismatch | SslPolicyErrors.RemoteCertificateChainErrors;
System.Diagnostics.Debug.WriteLine("4 Connection will start");
IConnection connection = factory.CreateConnection();
IModel channel = connection.CreateModel();
抛出异常:
RabbitMQ.Client.dll中的"RabbitMQ.客户端.异常.代理不可达异常"
异常RabbitMQ。客户端。异常。代理不可达异常:指定的终结点都不可访问
System.AggregateException:发生一或多个错误。(验证失败,请参阅内部例外状况。)
系统。安全性。身份验证。身份验证异常:验证失败,请参阅内部例外状况。
系统出现异常(0x8009030D):无法识别提供给包的凭据
获取凭据句柄(ISSPI接口安全模块,字符串包,凭据使用意图,SCH_CREDENTIALS * scc)
获取凭据句柄(凭据使用凭据用法,SCH_CREDENTIALS * 安全凭据)
在系统. Net.安全. SslStreamPal.获取凭据句柄SchCredentials(SslStreamCertificateContext证书上下文,SslProtocols协议,加密策略策略,布尔值为服务器)
SslStreamPal.AcquireCredentialsHandle(SslStreamCertificateContext证书上下文,SslProtocols协议,加密策略策略,布尔值为服务器)
- --内部异常堆栈跟踪结束---
SslStreamPal.AcquireCredentialsHandle(SslStreamCertificateContext证书上下文,SslProtocols协议,加密策略策略,布尔值为服务器)
获取客户端凭据(字节[]和指纹)
在系统.网络.安全.安全通道.生成令牌(只读跨度1 inputBuffer, Byte[]& output) at System.Net.Security.SecureChannel.NextMessage(ReadOnlySpan
1传入缓冲区)
在系统. Net.安全. SslStream.进程二进制大对象(Int32帧大小)中
[TIO适配器](TIO适配器适配器)
(TIO适配器适配器,布尔值为receiveFirst,字节[]为reAuthenticationData,布尔值为isApm)
在RabbitMQ.Client.Implement.SslHelper.〈〉c___DisplayClass2_0.b__0(SslOption选项)中,您可以选择
在RabbitMQ.客户端.实现. SslHelper. tcpUpgrade(流tcpStream,SslOption选项)
在RabbitMQ.Client.Impl.SocketFrameHandler.. ctor(AmqpTcpEndpoint端点,函数2 socketFactory, TimeSpan connectionTimeout, TimeSpan readTimeout, TimeSpan writeTimeout) at RabbitMQ.Client.Framing.Impl.IProtocolExtensions.CreateFrameHandler(IProtocol protocol, AmqpTcpEndpoint endpoint, ArrayPool
1个池,函数2 socketFactory, TimeSpan connectionTimeout, TimeSpan readTimeout, TimeSpan writeTimeout) at RabbitMQ.Client.ConnectionFactory.CreateFrameHandler(AmqpTcpEndpoint endpoint) at RabbitMQ.Client.EndpointResolverExtensions.SelectOne[T](IEndpointResolver resolver, Func
2个选择器) - --内部异常堆栈跟踪结束---
在RabbitMQ。客户端。端点解析器扩展。SelectOne [T](I端点解析器解析器,Func'2选择器)
在RabbitMQ.客户端.成帧.实现.自动恢复连接.初始化(端点解析器端点)
在RabbitMQ。客户端。连接工厂。创建连接(I端点解析器端点解析器,字符串客户端提供的名称) - --内部异常堆栈跟踪结束---
在RabbitMQ。客户端。连接工厂。创建连接(I端点解析器端点解析器,字符串客户端提供的名称)
在RabbitMQ。客户端。连接工厂。创建连接(字符串客户端提供的名称)
客户端.连接工厂.创建连接()
在C:\Bordel\高级连接器. NET\高级连接器. MVC\模型\高级连接器. cs中的高级连接器.连接RabbitMQ():第62行
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor:错误:未找到视图“”。
搜索的位置:/查看次数/Home/在线留言,/查看次数/Shared/在线留言
异常处理程序中间件:错误:执行请求时发生未处理的异常。
系统操作无效异常:未找到视图“”。
检索了以下位置:
/查看次数/Home/首页
/查看次数/共享/StartRabbitMq. cshtml
查看引擎结果。确保成功(I可枚举的1个原始位置)
在Microsoft. aspNetCore.mvc.ViewFeature.ViewResultExecutor.ExecuteAsync(操作上下文上下文,视图结果结果)中,您可以使用一个或多个操作来创建一个或多个结果。
在Microsoft. aspNetCore.mvc.ViewResult.ExecuteResultAsync(操作上下文上下文)中,您可以在一个或多个操作上下文中查看结果。
这是一个很好的解决方案。|30_0 [TFilter,TFilterAsync](资源调用程序调用程序,任务上一个任务,下一个状态,作用域作用域,对象状态,布尔值isCompleted)
重新抛出(结果执行上下文密封上下文)
在Microsoft. AspNetCore. Mvc.基础结构.资源调用程序. ResultNext [TFilter,TFilterAsync](状态与下一个,作用域与作用域,对象与状态,布尔值与已完成)
这是一个很好的解决方案。 - --从前一个位置开始的堆栈跟踪结尾---
这是一个很好的解决方案。|25_0(ResourceInvoker调用程序,任务lastTask,状态next,作用域作用域,对象状态,布尔值isCompleted)
重新抛出(资源执行上下文密封上下文)
在Microsoft.AspNetCore.Mvc.基础结构.资源调用程序.Next(状态与下一个,作用域与作用域,对象与状态,布尔值与isCompleted)
这是一个很好的解决方案。
---从前一个位置开始的堆栈跟踪结尾---
这是一个很好的解决方案。|17_0(ResourceInvoker调用程序、Task任务、IDisposable作用域)
这是一个很好的解决方案。|17_0(ResourceInvoker调用程序、Task任务、IDisposable作用域)
路由。端点中间件。g__等待请求任务|6_0(端点端点、任务请求任务、ILogger记录器)
授权中间件调用(HttpContext上下文)
异常处理程序中间件.g__等待|6_0(ExceptionHandlerMiddleware中间件、HttpContext上下文、Task任务)
我更改了权限,尝试更改不同的路径、凭据、不同的IIS服务器。
1条答案
按热度按时间fnx2tebb1#
原因是IIS:应用程序池-选择正确的/创建的或默认的池-高级设置//在进程模型-身份下我必须切换到NetworkService