Этот вопрос эквивалентен этому вопросу 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?