gpt4 book ai didi

c# - .Net SslStream 在桌面上正常工作,但在 session 0(Windows 服务 session )中不正常

转载 作者:可可西里 更新时间:2023-11-01 02:50:35 25 4
gpt4 key购买 nike

我有这段代码,它通过 TCP 建立到服务器的 SSL 加密流:

var client = new TcpClient(host, port);

var stream = new SslStream(client.GetStream(), false, ValidateServerCertificate);

var clientCertificates = new X509CertificateCollection {clientCertificate};

stream.AuthenticateAsClient(host, clientCertificates, sslProtocols, false);

var isAuthenticated = stream.IsAuthenticated; //This is true in both Console and Windows Service

var lenghtBytes = new byte[4];

int read = 0;

while (read < 4)
{
read = read + stream.Read(lenghtBytes, read, 4 - read);
}

当以 Administrator 用户身份作为常规控制台应用程序运行时,它工作得非常好。

然而,相同的代码在 while 循环 中不断循环,这意味着当应用程序注册并作为 Windows 服务(在 session 0 中)运行时读取流的前 4 个字节,如 本地系统用户。

调试时,作为控制台应用程序,while 循环 在第一个循环中接收所有 4 个字节并在第一轮后立即退出循环,但是当作为 Windows 服务运行时,流不会'不接收任何字节(read 始终为 0)并一直循环下去。

代码在安装了最新更新的 Windows Server 2012 R2 机器上运行,在 .Net Framework v4.6.2 上。

非常感谢任何提示。

最佳答案

当您作为本地系统运行时,基于根证书可用性、代理设置等,ssl 握手可能会遇到错误,因为这些是特定于 Windows 的用户。如果不调试问题,将很难理解问题出在哪里.

您可以使用 sys 内部实用程序在本地系统下运行任何进程 PsExec .您必须使用的命令是 psexec -s <programpath>

C:\windows\system32>psexec -s cmd.exe

PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com


Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\windows\system32>whoami
nt authority\system

一旦你在本地系统下运行了你的工具,你可以调试它来找出发生了什么。如果这没有帮助,你也可以捕获一个 system.net thisthis

希望对您有所帮助!

关于c# - .Net SslStream 在桌面上正常工作,但在 session 0(Windows 服务 session )中不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44941258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com