Конфигурация для использования Mercurial с Bitbucket из-за прокси-сервера перезаписи сертификата? - PullRequest
4 голосов
/ 24 января 2012

Я пытаюсь получить доступ к BitBucket с работы.Единственный доступ к Интернету - через HTTP-прокси-сервер аутентификации, который проксирует http на порту 8080 и SSL на порту 8070. Этот прокси-сервер проводит атаку «человек посередине» на SSL-соединения, браузеры могут создавать HTTPS-соединения с Интернетом.только из-за установки поддельного сертификата Websense на всех клиентах.

Я могу подключиться к BitBucket с помощью Git, но не с помощью Mercurial.Я использую Mercurial версии 2.0.2.

С Git я использую следующую конфигурацию в .gitconfig

[user]
    name = Firstname Lastname
    email = firstname_lastname@domain.co.uk
[http]
    proxy = http://name:password@nnn.nnn.nnn.nnn:8080

и могу клонировать репозиторий с помощью следующей команды

D:\MercurialTesting>git clone http://Firstname_Lastname@bitbucket.org/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 url https://Firstname_Lastname@bitbucket.org/Firstname_Lastname/bb102repo.git

Используя Mercurial, хотя это уже другая история.Используя следующую конфигурацию в mercurial.ini

[http_proxy]
host = nnn.nnn.nnn.nnn:8080
user = firstname_lastname@domain.co.uk
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:password@ip.ip.ip.ip:8070
https_proxy=username:password@ip.ip.ip.ip:8080
https_proxy=http://ip.ip.ip.ip:8070
https_proxy=http://ip.ip.ip.ip:8080
https_proxy=http://username:password@ip.ip.ip.ip:8070
https_proxy=http://username:password@ip.ip.ip.ip:8080

Результаты одинаковы, независимо от того, что я установил.

Итак, вопросы, с которыми я мог бы действительно помочь:

Почему я могу получить доступ к своим репозиториям Mercurial дома, ноне в BitBucket?

Почему я могу получить доступ к BitBucket с помощью Git, но не с Mercurial, используя ту же конфигурацию?

У кого-нибудь есть идеи, как заставить это работать или что я могуследующий тест?

Ответы [ 3 ]

2 голосов
/ 12 июля 2013

Я также подключаюсь через прокси к bitbucket. Поскольку мои настройки не работали, как ожидалось, я нашел эту запись SO.

Я заметил, что если я использую параметры командной строки, то все работает.

hg --config http_proxy.host=192.168.1.1:8080 --config http_proxy.user=Vad1mo --config http_proxy.passwd=secret clone https://bitbucket.org/Vadimo/test

С другой стороны, те же записи в Mercurial.ini не работали.

[http_proxy]
host = 192.168.1.1
port = 8080
user = Vad1mo
passwd = internet 

Случайно я обнаружил крошечную разницу между CMD и ini. В CMD порт добавляется к хосту. В INI-файле это новая запись.

Изменение mercurial.ini для постфикса порта для хоста, как в командной строке, решило проблему.

[http_proxy]
host = 192.168.1.1:8080
;port = 8080
user = Vad1mo
passwd = internet 

Может быть, это также поможет вам.

кстати. моя версия hg 2.6.3

1 голос
/ 16 апреля 2012

Я столкнулся с аналогичной проблемой с прокси моей работы - фактически, почти идентичной.

До сих пор я обошел проблему, установив http_proxy в mercurial.ini и затем подключившись к BitBucket через их HTTP-адрес hg.io.

Например, мой репозиторий на https://bitbucket.org/mattgwagner/mattgwagner.com можно получить через http://hg.io/mattgwagner/mattgwagner.com.Конечно, это отправит ваш пароль и соединение в незашифрованном виде, но, по крайней мере, позволит мне подключиться.

Это стало более полезным для меня, когда я использовал проекты с открытым исходным кодом, размещенные на BitBucket, для моего использования.

Mercurial.ini
[http_proxy] host = 192.168.1.155:8080
no =
user = domainUsername
passwd = pass

0 голосов
/ 10 апреля 2012

Вы в состоянии ssh? Bitbucket поддерживает доступ по SSH, и ваш прокси не будет испорчен, если это разрешено.

...