1

.NET Socket クラスを使用してホストに定期的に接続する Windows サービスがあります。これは、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 ハンドシェイクは、エラーが再び発生するまでしばらくの間 (場合によっては数日) 機能します。

4

0 に答える 0