Я пытаюсь получить доступ к BitBucket с работы. Единственный доступ к Интернету осуществляется через HTTP-прокси с проверкой подлинности, который проксирует http на порт 8080 и SSL на порт 8070. Этот прокси-сервер проводит атаку «злоумышленник посередине» на SSL-соединения, браузеры могут создавать HTTPS-соединения с Интернетом. только из-за установки поддельного сертификата Websense на всех клиентах.
Я могу подключиться к BitBucket с помощью Git, но не с помощью Mercurial. Я использую Mercurial версии 2.0.2.
С Git я использую следующую конфигурацию в .gitconfig
[user]
name = Firstname Lastname
email = [email protected]
[http]
proxy = http://name:[email protected]:8080
И можете клонировать репозиторий с помощью следующей команды
D:\MercurialTesting>git clone http://[email protected]/Firstname_Lastname/bb102repo.git test1
Cloning into 'test1'...
Password for 'bitbucket.org':
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
D:\MercurialTesting>
С добавлением этого параметра конфигурации
[http]
sslverify = false
Я также могу клонировать репозиторий через https-адрес https://[email protected]/Firstname_Lastname/bb102repo.git
Но при использовании Mercurial это совсем другая история. Используя следующую конфигурацию в mercurial.ini
[http_proxy]
host = nnn.nnn.nnn.nnn:8080
user = [email protected]
passwd = password
Mercurial без проблем получит доступ к моему собственному серверу Mercurial дома.
D:\MercurialTesting>hg --debug clone http://nnn.nnn.nnn.nnn/hg/Workspaces/Test1
using http://nnn.nnn.nnn.nnn/hg/Workspaces/Test1
proxying through http://nnn.nnn.nnn.nnn:8080
sending capabilities command
http authorization required
realm: Mercurial Repositories
user: username
password:
http auth: user username, password *******
destination directory: Test1
query 1; heads
sending batch command
http auth: user username, password *******
requesting all changes
sending getbundle command
http auth: user username, password *******
adding changesets
changesets: 1 chunks
add changeset 711ff2c6f5b2
changesets: 2 chunks
add changeset 9034b963b4c1
. . .
Использование той же конфигурации и попытка доступа к BitBucket через Mercurial просто зависает.
D:\MercurialTesting>hg --debug clone http://bitbucket.org/Firstname_Lastname/bb101repo
using http://bitbucket.org/Firstname_Lastname/bb101repo
proxying through http://nnn.nnn.nnn.nnn:8080
sending capabilities command
abort: error: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
D:\MercurialTesting>
Использование той же конфигурации с SSL через URL-адрес https://bitbucket.org/Firstname_Lastname/bb101repo Mercurial зависает в точно так же. Во время этого процесса Wireshark вообще не обнаруживает сетевой активности.
Изменение настроек Mercurial.ini в соответствии с портом, через который прокси-сервер обслуживает SSL, не имеет никакого эффекта. Установка переменной окружения http_proxy не имеет значения, но установка переменной окружения https_proxy полностью меняет вывод. Установка https_proxy и добавление --insecure к вызову команды hg приводит к:
D:\MercurialTesting>hg --debug clone http://bitbucket.org/Firstname_Lastname/bb101repo --insecure
using http://bitbucket.org/Firstname_Lastname/bb101repo
proxying through http://nnn.nnn.nnn.nnn:8080
sending capabilities command
warning: bitbucket.org certificate with fingerprint 79:ce:0d:30:b0:17:29:6a:d1:9f:dd:d3:62:80:70:28:5e:9f:c2:e3 not verified (check hostfingerprints or web.cacerts config setting)
http authorization required
realm: Bitbucket.org HTTP
user: Firstname_Lastname
password:
http auth: user Firstname_Lastname, password ***
warning: bitbucket.org certificate with fingerprint 79:ce:0d:30:b0:17:29:6a:d1:9f:dd:d3:62:80:70:28:5e:9f:c2:e3 not verified (check hostfingerprints or web.cacerts config setting)
abort: HTTP Error 502: Success
D:\MercurialTesting>
И теперь Wireshark обнаруживает обмен, происходящий между моей рабочей станцией и прокси-сервером. Что меня больше всего сбивает с толку, так это то, что это не имеет ни малейшего значения какой я установил https_proxy, hg всегда использует настройку http-прокси из Mercurial.ini и выдает тот же результат, что и выше, независимо от того, установите https_proxy на правильные данные для прокси SSL или для полного мусора. Единственная разница в том, что если переменная окружения https_proxy вообще не установлена, то hg просто зависает, как описано выше.
Форматы https_proxy, которые я пробовал, включают все варианты:
https_proxy=ip.ip.ip.ip:8070
https_proxy=ip.ip.ip.ip:8080
https_proxy=username:[email protected]:8070
https_proxy=username:[email protected]:8080
https_proxy=http://ip.ip.ip.ip:8070
https_proxy=http://ip.ip.ip.ip:8080
https_proxy=http://username:[email protected]:8070
https_proxy=http://username:[email protected]:8080
Результаты одинаковы, независимо от того, что я установил.
Вот вопросы, с которыми мне действительно нужна помощь:
Почему я могу получить доступ к своим репозиториям Mercurial дома, но не через BitBucket?
Почему я могу получить доступ к BitBucket с помощью Git, но не с Mercurial, используя ту же конфигурацию?
Есть ли у кого-нибудь идеи, как я могу заставить это работать или что я могу протестировать дальше?