我有一个 Windows 服务,它定期使用 .NET Socket 类连接到主机。它是使用 SMTP 协议的标准 TCP/IP 连接。
连接由存储在智能卡上的证书保护。我正在使用 SslStream 类来处理 SSL 内容。
这在大多数情况下都有效。但是在随机时间点,身份验证失败。我收到此错误:
A call to SSPI failed, see inner exception.
Error type:
System.Security.Authentication.AuthenticationException
Server stack trace:
at System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)
at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
内部异常:
System.ComponentModel.Win32Exception
The Local Security Authority cannot be contacted
尝试失败后,AuthenticationExcpetion 仍然存在,但内部异常发生了变化:
A signature operation must be performed before the user can authenticate
此时我必须重新启动服务,它现在将完美连接。SSL 握手会在错误再次发生之前工作一段时间(有时是几天)。