Заставить веб-адрес проходить через HTTPS

4325
dancramer

На моей работе http://twitter.com заблокирован, а https: // twitter нет. Есть ли способ, чтобы все программы / браузеры имели доступ к этому URL-адресу, используя протокол HTTPS вместо HTTP?

Это особенно относится к сторонним клиентам, которым требуется доступ к сайту, но обычно они жестко запрограммированы в HTTP без возможности их изменения.

ОБНОВЛЕНИЕ: я попытался создать сценарий fiddler, как предложено ниже, но я не смог его правильно запустить. Ответ со сценарием был бы наиболее полезным, или другой метод, полностью состоящий из доступа.

6
Помните, что не все сайты будут работать с https (хотя они должны) Josh Hunt 14 лет назад 0
@joshhunt - хорошо иметь в виду. Это будет относиться конкретно к сайтам, которые, как я знаю, работает https, но http - нет. dancramer 14 лет назад 0
У вас есть административный доступ на вашем рабочем компьютере? А какую версию Windows вы используете? Arjan 14 лет назад 0
Win XP с правами администратора dancramer 14 лет назад 0
Хорошо, тогда изменение файла `hosts` должно быть возможным, хотя это немного неловко. Если в настоящее время вам не нужно использовать какой-либо прокси-сервер компании (и вы не возражаете платить за некоторые ошибки), то использование прокси-сервера отладки Charles Web, как предложил Мэтью, также подойдет, если ваши приложения Twitter действительно поддерживают такие настройки прокси-сервера. (И это может быть предпочтительнее, так как он, вероятно, не разорвет цепочку сертификатов при явном использовании `https`, хотя DeleGate, вероятно, также может быть запущен как * и * шлюз HTTP-to-HTTPS« человек посередине », * и * обычный прокси для приложений, которые его используют.) Arjan 14 лет назад 0

9 ответов на вопрос

8
Arjan

Интересно, все ли сторонние приложения будут учитывать настройки прокси. Или, если изменение общесистемных настроек прокси может помешать другим приложениям. (Например, когда для доступа в Интернет требуется прокси-сервер компании, поэтому его нельзя изменить только для перенаправления трафика twitter.com.) К счастью, когда приложение не использует HTTPS, оно не может найти посредника. Итак: настройте «человека посередине» для twitter.comпорта 80, используя DeleGate .

Следующие шаги были протестированы на Mac OS X 10.6 и Windows XP с использованием учетных записей с полными правами администратора.

  1. Загрузите DeleGate. Не позволяйте домашней странице 1990-х обмануть вас: программа все еще поддерживается.

  2. Скажите DeleGate пересылать все локальные запросы через порт 80 (и 443) на сервер HTTPS, основываясь на значении заголовка Host в HTTP-запросе. Как для Mac на Intel (где sudoтребуется использовать привилегированные порты ниже 1024):

    sudo ./macosxi-dg -v -P80,443 \ SERVER=https \ RELAY=vhost \ RESOLV=cache,dns \ STLS=-fcl,fsv \ ADMIN=a@b.c 

    Для Windows, если разархивирован на c:\:

    cd c:\dg9_9_4\bin dg9_9_4.exe -v -P80,443 SERVER=https RELAY=vhost RESOLV=cache,dns STLS=-fcl,fsv ADMIN=a@b.c 

    Если вам необходимо использовать прокси-сервер вашей компании для доступа в Интернет, то DeleGate с радостью воспользуется этим, если вы добавите что-то похожее PROXY=proxy.example.com:8080на командную строку.

  3. В своем /etc/hostsфайле ( c:\windows\system32\drivers\etc\hostsв Windows XP; см. Википедии о расположениях в других ОС) добавьте следующую строку, чтобы перенаправить все запросы на twitter.comсвой компьютер. Обратите внимание, что сопоставление доменного имени с IP-адресом не учитывает протокол. Итак: это будет использоваться не только для HTTP, но и для HTTPS (и всего остального, например, таких как команды ping).

    127.0.0.1 twitter.com 
  4. Убедитесь, что ваш браузер не настроен на использование прокси-сервера, или добавьте twitter.comв качестве исключения. На случай, если ваш браузер кэширует IP-адрес Twitter, вы можете перезапустить его.

  5. Теперь http://twitter.com фактически получает вас (и все ваши приложения) https://twitter.com.


Вывод показывает, что действительно HTTPS-сайт запрашивается из https://twitter.com:

REQUEST - GET / HTTP/1.1 REQUEST = https://twitter.com:443/ GET / HTTP/1.1 [..] ConnectToServer connected [16]  ## SSLway -- TLSxSNI: sent ru=0 ty=0 nm=localhost ## SSLway ## 0.459622 connected/accepted ## SSLway server's cert. =  **subject / C=US/ O=twitter.com/ OU=GT09721236/ OU=See www.rapidssl.com/resources/cps (c)09/ OU=Domain Control Validated - RapidSSL(R)/ CN=twitter.com **issuer / C=US/ O=Equifax Secure Inc./ CN=Equifax Secure Global eBusiness CA-1 


При использовании MOUNT="/* https://twitter.com/*"вместо того, чтобы RELAY=vhostдаже http://localhostдать один https://twitter.com:

Твиттер через DeleGate


При явном запросе использования HTTPS https://twitter.comцепочка доверенных сертификатов разрывается: приложение, поддерживающее HTTPS , обнаружит атаку «человек посередине» и завершится неудачно, если не сможет запросить у вас разрешение на продолжение:

Человек посередине


После тестирования для запуска в качестве службы в Windows просто удалите -vпараметр. Это установит программу как сервис. Затем он будет работать в фоновом режиме и спросит вас, хотите ли вы запустить его при запуске:

Trying to start as a service [DeleGate Server -P80,443] ... Set Automatic Start on System Startup ? [y] / n : 

После выполнения вышеуказанной команды без -vпараметра: см. Панель управления »Администрирование» Службы, чтобы вручную запустить или остановить DeleGate. Обратите внимание, что этот сервис будет ссылаться на место, откуда вы изначально запустили dg9_9_4.exeпрограмму. Таким образом, вы не должны удалять или перемещать эту программу; например, обязательно разархивируйте загрузку, c:\dg9_9_4чтобы избежать ссылки на какой-либо каталог загрузок, который вы можете удалить в будущем.

Чтобы удалить службу, просто убедитесь, что для параметра указано то же значение -P:

dg9_9_4.exe -P80,443 ADMIN=a@b.c [..] The service `DeleGate Server -P80,443' exists. Delete it ? [y] / n : y OK. DELETEd the previous service. Create a new service ? [y] / n : n 


Наконец, можно задаться вопросом, откуда DeleGate знает IP-адрес twitter.com (как мы сопоставили его с 127.0.0.1 в hostsфайле). DeleGate на самом деле извлекает это из-за RESOLV=cache,dns:

MOUNT[5]X[2] /* https://twitter.com/*  SOA got [162.143.168.in-addr.arpa][ns1.dn.net] [dnsadmin.enterprise.verio.net] 2008121001 10800 3600 604800 86400 
Потрясающий ответ, получите примеры, и это сработало как шарм. Спасибо Арджан! dancramer 14 лет назад 0
5
crb

Вам нужен какой-то прокси-сервер с возможностью перезаписи правил. Я подозреваю, что в отсутствие лучшего ответа вы могли бы написать правило модификатора для Fiddler, чтобы сделать это. Правила Fiddler написаны на JavaScript, и есть несколько примеров в Интернете.

Редактировать: Пожалуйста, посмотрите и проголосуйте, ответ Эрика Лоу на этой странице.

Я думаю, что это будет путь, я скачаю Fiddler и посмотрю, как трудно будет написать скрипт перенаправления. dancramer 14 лет назад 0
Хорошо, я приложил добросовестные усилия, чтобы все заработало, и не повезло. Мне понадобится пример сценария, чтобы это действительно получилось. dancramer 14 лет назад 1
И прокси-сервер должен быть * вне брандмауэра *, если на вашем компьютере блокировка не происходит на уровне отдельных приложений. reinierpost 14 лет назад 1
@reinierpost, я бы сказал, что (дополнительный) прокси-сервер должен быть * внутри * брандмауэра (то есть: на рабочей станции), так как он должен переписать HTTP на HTTPS перед тем, как пытаться пройти этот брандмауэр. Arjan 14 лет назад 1
Сценарий Fiddler тривиален, но система комментариев здесь переформатирует код в комментарии, поэтому я добавил дополнительный ответ со сценарием. EricLaw 14 лет назад 1
3
EricLaw

Скрипач Правило довольно просто. Внутри OnBeforeRequest добавьте:

if (oSession.fullUrl.StartsWith("http://twitter.com/")) { oSession.oRequest.headers.UriScheme = "https"; } 
Ницца. (Надеемся, что все сторонние приложения соблюдают общесистемные настройки прокси-сервера. Если для подключения к Интернету также необходимо использовать какой-либо прокси-сервер компании, то, очевидно, Fiddler также поддерживает в своих настройках «Цепь к вышестоящему прокси-серверу шлюза».) Arjan 14 лет назад 0
2
harrymc

Вы можете избежать всякого осуждения, используя VPN и туннелирование из вашей рабочей сети.

VPN-туннелирование включает в себя установление и поддержание логического сетевого соединения (которое может содержать промежуточные переходы). В этом соединении пакеты, созданные в определенном формате протокола VPN, инкапсулируются в некоторый другой базовый или несущий протокол, затем передаются между VPN-клиентом и сервером и, наконец, де-инкапсулируются на принимающей стороне.

Это означает, что все ваши пакеты отправляются через посредника в Интернете. Этот посредник обычно не блокируется брандмауэром вашей компании, и он пересылает все ваши пакеты по назначению, а затем возвращает полученные ответы на ваш компьютер. Кроме того, VPN-соединение гарантирует, что все ваши пакеты в обоих направлениях закодированы и защищены от посторонних глаз.

Вы получите лучший сервис от коммерческих продуктов, но некоторые из них бесплатны и не так уж плохи. Например, HTTP-Tunnel Client - очень хороший продукт.

1
Matthew Lock

Это не бесплатно, но у Charles (прокси-сервер отладки) есть функция Map Remote Settings, которая может быть легко отображена http://twitter.comс https://twitter.comпомощью графического интерфейса пользователя. Вы можете скачать пробную версию с сайта, чтобы увидеть, соответствует ли она вашим потребностям.

альтернативный текст

0
Stephen

Вы можете написать скрипт Greasemonkey с помощью Firefox. Вот один для FriendFeed .

Изменить: скрипт для Twitter.

Не помогает ему с внешними клиентами. crb 14 лет назад 1
Ах да. Ну, если кто-то хочет сделать это локально, вы можете получить скрипт здесь http://userscripts.org/scripts/show/53744 Stephen 14 лет назад 0
0
harrymc

Под Firefox кажется, что дополнение Force-TLS решает вашу проблему.
Цитата:

Вот как это работает:

  1. Сайт x.com, обслуживаемый по HTTPS, в своем ответе предоставляет заголовок X-Force-TLS. Заголовок содержит значение максимального возраста (как долго запоминать принудительный TLS) и опционально флаг includeSubDomains.
  2. Браузер получает этот заголовок и добавляет его в базу данных Force TLS.
  3. В будущем любые запросы к x.com изменяются на HTTPS, если они выполняются через HTTP, прежде чем запрос попадет в сеть.
  4. Если какие-либо субдомены * .x.com запрашиваются через HTTP и был установлен флаг includeSubDomains, они также должны быть HTTPS.
Решение для всех браузеров довольно сложное. Я считаю, что ОП предпочитает простое решение. harrymc 14 лет назад 0
ОП не нуждается в решении для * любого * браузера (можно легко * вручную ввести * `https` в браузере). Речь идет о программном обеспечении, которое подключается только к HTTP и в котором URL нельзя изменить. Arjan 14 лет назад 1
Я полагаю, что он скорее подключается через https к странице, содержащей ссылки http, которые ему необходимо преобразовать в https, поскольку http для этого сайта заблокирован. harrymc 14 лет назад 0
Что ж, он пишет * Это относится, в частности, к третьим клиентам, которым необходим доступ к сайту, но обычно они жестко запрограммированы на http без возможности их изменения. * ... Arjan 14 лет назад 1
Возможно, вы правы - я добавил еще один ответ, который касается всех программ на компьютере с использованием VPN-туннелирования. harrymc 14 лет назад 0
-1
user1088

Я думаю, что нет = /

Кто-то может найти способ сделать это, но, видя это как разработчика программного обеспечения: многие приложения имеют жесткую кодировку http://twitter.com, и поскольку не только адрес, но и протокол другой, я не вижу способ сделать это автоматически, без изменения приложения. Некоторые приложения могут работать с обоими, так что вы можете настроить его.

Примечание: веб-приложения более хакерские, чем настольные.

РЕДАКТИРОВАТЬ: хорошо, crb. Прокси-сервер, в зависимости от способа блокировки Twitter, может ему помочь.

Вот где прокси-сервер пригодится :) crb 14 лет назад 1
-1
alpha1

Возможно, другим решением будет использование клиента, такого как DestroyTwitter или TweetDeck . Они не используют twitter.com напрямую, а пишут в Твиттере и читают API, который, вероятно, не заблокирован.

API использует HTTP (и доменное имя twitter.com) так же, как браузер. Например, http://twitter.com/statuses/public_timeline.xml или http://twitter.com/statuses/user_timeline/codinghorror.xml?count=5. Arjan 14 лет назад 1
это зависит от того, как они блокируют, если они блокируют twitter.com, это будет работать, если они блокируют его по ключевому слову или twitter.com/*, это не удастся, он получил оба в разных местах alpha1 14 лет назад 0