Опитвам се да вляза в 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 url 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, използвайки същата конфигурация?
Някой има ли идеи как мога да накарам това да работи или какво мога да тествам след това?