TcpClient SslStream Authenticating - рукопожатие не удалось из-за непредвиденного формата пакета - PullRequest
0 голосов
/ 03 октября 2018

Итак, я создаю систему TcpClient с поддержкой прокси HTTP / s и SOCKS4 / 5, и она работает довольно хорошо, но проблема в том, что SSL-аутентификация очень часто возвращает неожиданные исключения.

var ClientNetworkStream = _TcpClient.GetStream(); //where _TcpClient is a connected TcpClient to lets say a SOCKS4 Proxy
//where url = an Absolute URI of an url
if (!url.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase)) return;//Nothing to do as its not a https url
SslStream sslStream = new SslStream(ClientNetworkStream, false, (sender, cert, chain, err) => true);//create sslStream and ignore cert checking as I do not need it
try {
    sslStream.AuthenticateAsClient(url.Host, null, false);
} catch (IOException ex) {
    //The handshake packet issue gets thrown here.
}

ЕслиЯ вообще не должен был Аутентифицировать, он бы возвратил тело с сообщением «HTTP-запрос отправлен на порт https», поэтому я предполагаю, что SSLStream действительно необходим.

Кто-нибудь знает, что случилось неправильно?

URL-адресапорт будет: 443 (SSL) И порт прокси обычно будет довольно случайным, эта проблема возникла на: 80, 8080, 8888, 3128, 8118, 1080, 5555, 8123 и многих других

(Да, iveПодтверждено, что он работает с большинством из упомянутых портов на других прокси: https://i.imgur.com/pY2dkGf.png)

Это снимок экрана трассировки стека (не удалось надежно получить копию его вставки): enter image description here

...