我有一個非常基本的客戶機/服務器測試設置失敗與消息:NegotiateStream拒絕非本地管理員的客戶
服務器拒絕了客戶端證書。
除非客戶端作爲在服務器上具有管理權限的帳戶登錄。這是我不想要的。
這裏是我的客戶端代碼:
var formatter = new BinaryFormatter();
...
using (var client = new TcpClient(ip, 1248))
using (var stream = client.GetStream())
using (var negStream = new NegotiateStream(stream, false))
{
await negStream.AuthenticateAsClientAsync(CredentialCache.DefaultNetworkCredentials, string.Empty, ProtectionLevel.EncryptAndSign, TokenImpersonationLevel.Identification));
formatter.Serialize(negStream, "This is a test!");
}
這裏是我的服務器代碼:
var listener = new TcpListener.Create(1248);
listener.Start();
var tcpClient = listener.AcceptTcpClient();
using (var stream = tcpClient.GetStream())
using (var negStream = new NegotiateStream(stream, false))
{
await negStream.AuthenticateAsServerAsync(CredentialCache.DefaultNetworkCredentials, ProtectionLevel.EncryptAndSign, TokenImpersonationLevel.Identification));
Console.WriteLine(formatter.Deserialize(negStream));
}
如何配置服務器接受任何登錄的用戶?我需要看另一個設置嗎?是否有另一種使用域憑據對流進行身份驗證的方法?
您是否檢查過服務器上的安全事件日誌?你正在運行哪個操作系統版本? –
安全事件日誌沒有失敗。沒有什麼不尋常的。我在Server 2012 R2和Windows 7上運行。 –
服務器和客戶端在哪個帳戶下運行? (Domain-Accounts,NetworkService,LocalUser)並嘗試在AuthenticateAsServer()和AuthenticateAsClient()之外使用簡單的重載。 –