Захват HTTPS-запроса на несуществующий сервер с помощью FiddlerCore

Я пытаюсь ответить на запрос https, используя fiddlercore. Мне нужно, чтобы все работало так: я вставил в браузер фальшивый URL, например https://my_url_that_doesnt_exist.com/Я перехватываю этот запрос с помощью fiddlercore и отвечаю на него своими данными. Но я вижу только CONNECT и URL хоста. Я знаю, что его HTTPS и Fiddler является прокси. Но есть ли способ получить реальный URL и иметь возможность ответить на запрос https, используя ядро ​​Fiddler?

Также я использую этот код для создания корневого сертификата, если его нет:

if (!Fiddler.CertMaker.rootCertExists()) { if (!Fiddler.CertMaker.createRootCert()) { throw new Exception("Could not create a certificate."); } }

также я использую настройки запуска:

FiddlerCoreStartupFlags fcsf = FiddlerCoreStartupFlags.Default | FiddlerCoreStartupFlags.DecryptSSL|FiddlerCoreStartupFlags.AllowRemoteClients;

а также CONFIG.IgnoreServerCertErrors = true;

Этот запрос https не виден в самом фиддлере. Я имею в виду, если я попробую какой-нибудь несуществующий URL, на который я бы хотел, чтобы мое приложение ответило каким-то пользовательским контентом. Кроме того, HTTP, а не HTTPS, и сам Fiddler содержат в ответ следующее:[Fiddler] DNS Lookup for "my_url_that_doesnt_exist.com" failed. The requested name is valid, but no data of the requested type was found

Но если я использую какой-либо существующий URL-адрес https, например, Google Plus или что-то подобное, я вижу https и все детали запроса.

Итак, возникает вопрос: как я могу перехватить https-запрос к несуществующему URL и вместо этого обслуживать мой контент? Я могу предоставить любые дополнительные детали, если это необходимо.

Также makecert.exe находится в той же папке, где находятся все мои файлы.

1 ответ

Решение

Проблема заключается в том, что трафик HTTPS проходит через туннель CONNECT, и по умолчанию этот безопасный трафик не отправляется, если сначала не удается создать туннель CONNECT на целевом сервере. Конечно, если этот целевой сервер не существует, вы в результате создаете туннель с ошибкой DNS, поэтому защищенные запросы никогда не отправляются.

Обходной путь должен сказать Fiddler сообщить клиенту, что туннель CONNECT был создан, даже не пытаясь связаться с сервером. Сделайте это, добавив это внутри BeforeRequest обработчик:

if (oSession.HTTPMethodIs("CONNECT"))
{
  oSession.oFlags["x-replywithtunnel"] = "GenerateTunnel";
  return;
}
Другие вопросы по тегам