gpt4 book ai didi

c# SSL TCPServer 停留在 SsLStream.AuthenticateAsServer()

转载 作者:可可西里 更新时间:2023-11-01 16:20:10 25 4
gpt4 key购买 nike

故事情节:

我想用 c# 制作我自己的网络服务器(第一次尝试)。一切顺利(我使用 Visual Studio 编写应用程序并使用 Firefox 检查我是否做对了)并且我设法制作了一个基本的 TCPServer。当我试图向它添加 SSL 支持时,我遇到了一个问题。

  • 在过去的 7 天里,我一直在尝试使用 SSLStream.AuthenticateAsServer([self-signed certificate]) 作为支持 SSL 的 TcpServer 进行身份验证

问题:

当我从我心爱的 Firefox 收到 [Upgrade-Insecure-Requests: 1] 时,我正在尝试 [SSLStream.AuthenticateAsServer([self-signed certificate])]。这样做我的代码卡住了(但没有卡住/崩溃)在这一行,而我的 Firefox 一直在加载,似乎没有给我发送响应。

代码:


启动我的服务器


TCPServer.ServerStart(8080);


(监听器正在我的 TCPServer 类中定义)

internal static TcpListener listener;

async internal static void ServerStart(int port)
{
if (listener == null)
{
listener = new TcpListener(IPAddress.Any, port);
}
listener.Start();

//clients
await Task.Run(()=> SucheNachBesuchern());
listener.Stop();
}


接受客户


private static void SucheNachBesuchern(){
TcpClient Besucher;

while (true)
{
Besucher = listener.AcceptTcpClient();
ThreadPool.QueueUserWorkItem(ThreadProzess, Besucher);
}
}


处理接受的客户


private static void ThreadProzess(object Besucher) {
TcpClient besucher = (TcpClient)Besucher;
Abfertige(besucher);
besucher.Close();
besucher.Dispose();
}

private static void Abfertige(TcpClient Besucher)
{
//Reading the Request
StreamReader Auftrag = new StreamReader(Besucher.GetStream());
List<String> AuftragNachricht= new List<String>();
while (Auftrag.Peek()!=-1) {
AuftragNachricht.Add(Auftrag.ReadLine());
}

//Anfrage = request Class with bool Anfrage.SSLAnfrage being true
//if the request contains 'Upgrade-Insecure-Requests: 1'
Anfrage Anfrage = Anfrage.VerarbeiteAuftrag(AuftragNachricht);

if (Anfrage.SSLAnfrage)// = if([request conatined 'Upgrade-Insecure-Requests: 1'])
{
//opening an SslStream to the TcpClient Besucher
SslStream SSLStream = new SslStream(Besucher.GetStream(), false);
try
{
//Authenticating as TcpServer supporting SSL !CODE IS STUCK AT THIS LINE!
SSLStream.AuthenticateAsServer([SELFSINGEDX509CERTIFICATE.cer using openssl pkcs12], clientCertificateRequired: false, enabledSslProtocols: System.Security.Authentication.SslProtocols.Default, checkCertificateRevocation: false);

//set timeouts for read and write
SSLStream.ReadTimeout = 5000;
SSLStream.WriteTimeout = 5000;

//tryig to catch my Firefox as new client on SSL port 443
TcpListener SSLListener = new TcpListener(IPAddress.Parse("192.168.178.72"), 443);
SSLListener.Start();
TcpClient SSLBesucher = SSLListener.AcceptTcpClient();
Debug.WriteLine("I'VE GOT A CLIENT HERE!!!!111");
}
catch (Exception Error) {
Debug.WriteLine($"---Error gefangen: {Error.ToString()}");
}
}//[...more Code]


(因为不了解 SSL I used this example-code)

最佳答案

Upgrade-Insecure-Requests并不意味着服务器可以加密当前 连接。 Firefox 仍然需要未加密的 HTTP/1.x 响应。但是此响应可以它重定向到另一个 URL — 可能在另一个端口上 — 从一开始就启用 SSL。

参见 example 8 in the Upgrade Insecure Requests specification .

关于c# SSL TCPServer 停留在 SsLStream.AuthenticateAsServer(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55267917/

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