Изменение SNI TLS с помощью HttpClient или HttpWebRequest - PullRequest
0 голосов
/ 14 января 2019

Этот вопрос эквивалентен этому вопросу Go , в котором было тривиально (хотя и довольно хакерски) получить желаемое поведение: я ищу способ изменить информацию SNI TLS, которая в конечном итоге заканчивается в сегментах TCP, созданных при использовании веб-клиентов высокого уровня в .NET.

Последний абзац в этого ответа предполагает, что взломать будет что-то вроде

static void Main(string[] args)
{
    HttpResponseMessage response;
    var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "https://desiredsni.com");
    httpRequestMessage.Headers.Add("Host", "example.com");
    var handler = new HttpClientHandler
    {
        CookieContainer = new CookieContainer()
    };
    using (var client = new HttpClient(handler))
    {
        response = client.SendAsync(httpRequestMessage).Result;
    }
}

для выполнения запроса к selectedsni.com с хостом example.com и SNI requiredsni.com. Тем не менее, в моем тестировании, и вопреки тому, что предлагается в ответе, тег SNI заменен на на example.com, что не очень хорошо в моем случае, так как я действительно хочу использовать заголовок Host поле - это одно, а поле SNI - что-то другое (и я согласен полностью удалить SNI). Аналогично, разрешение httpRequestMessage.RequestUri = new Uri("https://example.com"); также обновляет тег SNI на example.com.

Есть ли простой способ изменить то, что заканчивается в поле SNI, используя HttpClient, HttpWebRequest или что-то подобное, без изменения чего-либо еще в сегменте TCP?

...