Żball check_hostname ta’ pip wara proxy: pip jew il-mina?
Żewġ fallimenti jipprintjaw l-istess messaġġ tal-isem tal-host ta’ pip wara proxy. Iddistingwi klijent antik minn proxy li jerġa’ jiffirma l-traffiku, imbagħad sewwi s-saff it-tajjeb.
Żewġ fallimenti differenti jipprintjaw l-istess traċċa ta’ pip, u t-tiswija li taqbel ma’ waħda tħassar lill-oħra. Klijent wisq antik biex isemmi host mogħdija minn mina jeħtieġ aġġornament. Proxy li jerġa’ jiffirma l-traffiku jeħtieġ ċertifikat tal-għerq fiduċjuż, mhux tniżżil tal-verżjoni. Iddetermina liema miż-żewġ għandek qabel ma timmodifika varjabbli tal-proxy, għax il-mogħdijiet imorru f’direzzjonijiet opposti.
Aqra l-aħħar frejms qabel ma tmiss is-settings
Fejn tintemm it-traċċa jgħidlek liema saff ta lura. Jekk il-frejms tal-għeluq jinsabu fil-kodiċi TLS ta’ urllib3 miġbur ma’ pip u t-test jilmenta dwar isem tal-host, il-librerija tal-klijent ma setgħetx tlesti pass ta’ verifika, u dan huwa problema tal-verżjoni ħafna aktar spiss milli problema taċ-ċertifikat. Jekk it-test minflok jirrapporta konnessjoni miċħuda, isem tal-proxy mhux solvut jew HTTP 407, il-punt tat-tmiem tal-mina huwa ħati u l-ebda aġġornament mhu se jibdlu.
Aqbad il-verżjoni ta’ pip u l-varjabbli tal-proxy fl-istess qoxra li tfalli. Qoxra miftuħa qabel ma tela’ l-mina ġġorr valuri differenti minn waħda miftuħa wara, u d-differenza bejniethom spiss tkun id-dijanjosi kollha.
python3 -m pip --version
env | grep -i -E 'proxy|no_proxy'
Meta l-klijent ikun anzjan mill-mina
Rilaxxi aktar antiki ta’ pip kienu jġorru munġiera HTTPS li kienet titlef l-isem tal-host tad-destinazzjoni ladarba s-sokit kien imdawwar b’mina. Il-messaġġ check_hostname huwa dak li toħroġ dik il-munġiera meta tasal għall-verifika mingħajr isem biex tqabbel. Aġġornament ineħħi l-ħsara għax il-klijent aktar ġdid iżomm l-isem matul il-ħsieb tal-idejn, u l-bidla hija rħisa biżżejjed biex tipprova l-ewwel kull darba li l-frejms tal-għeluq jindikaw il-kodiċi TLS miġbur.
Jekk l-indiċi ma jistax jintlaħaq mill-magna li tfalli, ġib wheel kurrenti fuq host li jista’ u installa mill-fajl. Uża l-isem tal-fajl li verament niżżilt, mhux verżjoni kopjata minn post tal-blog.
python3 -m pip install --upgrade pip
python3 -m pip install ./pip-24.2-py3-none-any.whl
Meta l-proxy jerġa’ jiffirma l-traffiku
Proxy li jtemm it-TLS u jerġa’ joħroġ ċertifikati taħt għerq korporattiv jipproduċi żball differenti: certificate verify failed, mhux ilment dwar isem tal-host. Dik id-differenza hija l-ħjiel, għax il-klijent wasal għal server u mbagħad irrifjuta l-identità li ntwera. It-tiswija hija li tafda f’dak l-għerq b’mod espliċitu, jew għal kmand wieħed jew permezz tal-varjabbli PIP_CERT, sabiex il-klijent jista’ jibni katina sa dak li jippreżenta l-proxy. Iż-żieda tal-għerq fil-maħżen tal-fiduċja tas-sistema taħdem ukoll, iżda tbiddel il-fiduċja għal kull programm fuq il-magna, u dik hija deċiżjoni akbar milli ssewwi installazzjoni waħda ta’ pakkett.
Żomm --trusted-host bħala dijanjostika, qatt bħala stat permanenti. Dan jitfi l-verifika li kont qed tipprova żżomm, għalhekk ċertifikat verament żbaljat jidher f’saħħtu wara. Jekk użajtu biex tinstalla pakkett wieħed, neħħih u sewwi l-katina qabel ir-rilaxx li jmiss.
Il-kodiċi Python tiegħek stess jinjora għal kollox il-konfigurazzjoni ta’ pip. Sejħa requests teħtieġ li l-proxy u l-bundle jiġu mgħoddija fejn dik is-sessjoni tista’ tarahom, u għalhekk il-blokk ta’ hawn taħt jistabbilixxi t-tnejn fuq l-oġġett tas-sessjoni.
pip install --cert /usr/local/share/ca-certificates/corp-root.crt requests
export PIP_CERT=/usr/local/share/ca-certificates/corp-root.crt
s = requests.Session()
s.proxies = {"https": "http://10.20.30.40:8080"}
s.verify = "/usr/local/share/ca-certificates/corp-root.crt"
s.get("https://pypi.org/simple/", timeout=15)
Meta l-punt tat-tmiem jew il-port ikunu żbaljati
Klijent tal-mina spiss jerġa’ jikteb il-proxy tas-sistema waqt li jikkonnettja, li jista’ jħalli pip indikat lejn host li qatt ma jwieġeb fuq dak il-port. Ipprova l-punt tat-tmiem b’klijent li mhux pip qabel ma tbiddel xi setting ta’ pip. Jekk curl ifalli bl-istess argument tal-proxy, il-ħsara tinsab fuq pip u l-ebda konfigurazzjoni ġewwa pip mhi se tgħin.
Il-bandiera tal-kmand u l-varjabbli tal-ambjent jgħidu l-istess ħaġa għal ambjenti differenti: il-bandiera tapplika għal sejħa waħda, il-varjabbli għal kull proċess li jinbeda wara. Żid NO_PROXY għal indiċi intern sabiex it-traffiku privat tal-pakketti jaqbeż id-dawra mill-mina.
curl -x http://proxy.corp.internal:8080 --head https://pypi.org/simple/
pip install --proxy http://proxy.corp.internal:8080 requests
Ippreserva s-setting u ipprova li l-mogħdija taħdem
Aħżen il-proxy fil-konfigurazzjoni ta’ pip stess meta għandu jgħaddi mill-qoxra attwali, imbagħad aqra lura x’se juża verament pip. L-output tad-debug isemmi l-fajl u l-varjabbli wara kull valur, li ssolvi argumenti dwar il-preċedenza aktar malajr milli taqra d-dokumentazzjoni.
Il-verifika tuża tnejn klijenti apposta. It-talba mil-librerija standard turi r-rotta u l-katina tal-fiduċja, filwaqt li t-tniżżila turi li l-konfigurazzjoni ta’ pip stess taqbel magħhom. Meta l-ewwel tirnexxi u t-tieni tfalli, id-differenza tinsab ġewwa pip u mhux fin-netwerk.
pip config set global.proxy http://proxy.corp.internal:8080
pip config debug
python3 -c "import urllib.request as r; print(r.urlopen('https://pypi.org/simple/').status)"
pip download --no-deps -d /tmp/wheelcheck requests
| What you see | First command | Repair |
|---|---|---|
| hostname message inside vendored TLS frames | python3 -m pip --version | upgrade the client |
| certificate verify failed after the tunnel | curl -x http://proxy.corp.internal:8080 --head https://pypi.org/simple/ | trust the corporate root |
| connection refused or HTTP 407 | env | grep -i -E 'proxy|no_proxy' | correct host, port or credentials |