gpt4 book ai didi

c# - 在 AuthenticateAsServer 之前阅读 ClientHello

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:54 24 4
gpt4 key购买 nike

我正在开发一个需要管理不同 SSL 服务的服务器应用程序。每个服务都有自己的证书(当然有不同的 CN)。我想用 SNI提供正确的证书,但在对流进行身份验证之前,我正在努力阅读 ClientHello(SNI 扩展所在的位置)。

这是代码:

byte[] ClientHello = new byte[3000];
Stream TargetStream = TargetTcpClient.GetStream();

//Whatever I write here let me be unable to successfully authenticate
//If I don't read anything (like in this way), it works perfectly
int ClientHelloN = 0; //TargetStream.ReadByte();// TargetStream.Read(ClientHello, 0, 3000);

/*SNI Logic to extract Server-name*/
Certificate = new X509Certificate2(/*PATH TO CORRECT CERTIFICATE*/);

SslStream SSLStream = new SslStream(TargetStream);
SSLStream.AuthenticateAsServer(Certificate);

如果我直接使用带前缀的证书进行身份验证没有问题,但是当我尝试在 身份验证之前从流中读取一个字节时,它会在 AuthenticateAsServer 方法中永远循环。

最佳答案

我知道我来晚了一点,但为什么不看看 TcpClient 的底层套接字呢?

byte[] peekBuffer = new byte[16];
Socket socket = targetTcpClient.Client;
int bytesAvailable = socket.Receive(peekBuffer, SocketFlags.Peek);

if (bytesAvailable > 0)
{
if (peekBuffer[0] == 0x16) // ClientHello?
{
SslStream secureStream = new SslStream(targetTcpClient.GetStream());

}
}

关于c# - 在 AuthenticateAsServer 之前阅读 ClientHello,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17427154/

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