Код: Выделить всё
var url = "https://api.the.url.com/path/ver/endpoint";
var certFile = "TheFile.pfx";
var certPass = "ThePassword";
var cert = new X509Certificate2(
Path.Combine(AppContext.BaseDirectory, certFile),
certPass, X509KeyStorageFlags.MachineKeySet);
var handler = new SocketsHttpHandler();
handler.SslOptions.ClientCertificates = new X509CertificateCollection();
handler.SslOptions.ClientCertificates.Add(cert);
handler.SslOptions.LocalCertificateSelectionCallback = (_,_,_,_,_) => cert;
var httpClient = HttpClientFactory.Create(handler);
var result = await httpClient.GetAsync(url);
result.EnsureSuccessStatusCode();
Не удалось установить SSL-соединение, см. внутреннее исключение.
Невозможно записать данные в транспортное соединение: сброс соединения одноранговым узлом.
Сброс соединения одноранговым узлом
Когда я посмотрел TCP-трафик, рукопожатие прекращается, когда (мной) клиент подтверждает обмен ключами сервера на сервере/Привет, сервер готов.:
Отказ от ответственности: это дамп трафика Windows, я все еще работаю над его внедрением в Linux
Код: Выделить всё
TCP 66 44222 → 443 [SYN, ECE, CWR] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM
TCP 66 443 → 44222 [SYN, ACK, ECE] Seq=0 Ack=1 Win=14600 Len=0 MSS=1436 WS=1 SACK_PERM
TCP 54 44222 → 443 [ACK] Seq=1 Ack=1 Win=262656 Len=0
TLSv1.2 328 Client Hello
TCP 60 443 → 44222 [ACK] Seq=1 Ack=275 Win=14874 Len=0
TLSv1.2 1514 Server Hello
TCP 1514 443 → 44222 [ACK] Seq=1461 Ack=275 Win=14874 Len=1460 [TCP segment of a reassembled PDU]
TCP 54 44222 → 443 [ACK] Seq=275 Ack=2921 Win=262656 Len=0
TLSv1.2 1514 Certificate, Server Key Exchange
TLSv1.2 360 Certificate Request, Server Hello Done
TCP 54 44222 → 443 [ACK] Seq=275 Ack=4687 Win=262656 Len=0
TCP 109 443 → 44222 [RST, ACK] Seq=4687 Ack=275 Win=0 Len=55
Код: Выделить всё
TLSv1.2 2043 Certificate, Client Key Exchange, Certificate Verify, Change Cipher Spec, Encrypted Handshake Message
TCP 60 443 → 44566 [ACK] Seq=4687 Ack=2264 Win=16863 Len=0
TLSv1.2 105 Change Cipher Spec, Encrypted Handshake Message
TLSv1.2 153 Application Data
TCP 60 443 → 44566 [ACK] Seq=4738 Ack=2363 Win=16962 Len=0
TLSv1.2 642 Application Data
TLSv1.2 88 Application Data
TCP 54 44566 → 443 [ACK] Seq=2363 Ack=5360 Win=261888 Len=0
TCP 54 44566 → 443 [RST, ACK] Seq=2363 Ack=5360 Win=0 Len=0
Обновление 1:
Мне удалось вытащить TCP дамп из системы Linux, а RST был вызван превышением времени ожидания подтверждения SSL. Я не думаю, что мы можем пропустить проверку SSL с помощью HttpClient, а только игнорировать ее результат. Я пробовал использовать SslStream, который также не имеет такой настройки.
Обновление 2:
Я добавлен прослушиватель событий и вывод их в консоль. Кроме того, я запустил код на виртуальной машине Linux, чтобы Wireshark мог перехватывать ВЕСЬ трафик через виртуальный интерфейс (ранее я фильтровал только целевой IP-адрес).
Подробнее здесь: https://stackoverflow.com/questions/789 ... s-on-linux
Мобильная версия