2015-04-10 8 views
7

La domanda è, come posso installare i pacchetti in modo sicuro con pip, su Ubuntu Trusty? Ovviamente ho bisogno di chiarire perché credo che sia insicuro.Come utilizzare in modo sicuro pip (con SSL) su Ubuntu Trusty?

urllib3 fornisce un InsecurePlatformWarning se si effettua una richiesta https senza alcune librerie python aggiuntive di openssl aggiuntive installate, prima di Python 2.7.9. Questa è una domanda ben consolidata e risposta:

InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately

Il problema è che, se si installa pip versione 6 o giù di lì, si inizia a dare questo molto avvertimento, come si installa nulla. Dalla lettura della risposta ufficiale al problema:

https://urllib3.readthedocs.org/en/latest/security.html#pyopenssl

suona come il problema risiede nella libreria SSL Python. Pip è appena passato alla libreria ssl Python da openssl nell'ultima versione? La mia ipotesi (forse una cattiva ipotesi) è che pip ha usato la libreria Python prima, ha appena usato una versione precedente di urllib che non ha nemmeno dato l'avviso. Quindi è stato insicuro tutto il tempo (anche se il particolare problema di preoccupazione sembra essere piuttosto recente).

Beh, se è il caso, la versione standard di pip su Ubuntu non è sicura. Non posso usarlo per installare in sicurezza le cose per renderlo sicuro. Non importa, posso solo installare le stesse cose dalla repo di Ubuntu, che verifica i pacchetti con GPG:

http://packages.ubuntu.com/search?keywords=python-ndg-httpsclient

Salvo quanto sopra è disponibile solo a partire dal Utopic. Su Trusty mi sembra di essere bloccato.

Allora, qual è l'affare? Devo tirare i dadi e installare questa roba in modo non sicuro una volta, e poi usare pip in modo sicuro solo dopo? Oppure sto fraintendendo completamente la situazione?

risposta

6

pip utilizza il modulo libreria standard ssl per impostazione predefinita (a meno che non si installino anche le librerie aggiuntive che hai menzionato). Prima di Python 2.7.9 e Python 3.2 (ish, credo fosse 3.2, potrebbe essere stato 3.1) il modulo ssl all'interno della libreria standard non ha la capacità di controllare determinate impostazioni relative a ssl.

Alcune di queste impostazioni:

  • Non è possibile disabilitare SSLv3, senza esplicitamente inchiodandolo al TLSv1.0 (e non si può appuntare al TLSv1.1 o TLSv1.2).
  • Non è possibile disabilitare la compressione TLS.
  • Non è possibile utilizzare SNI, forzando tutti gli host con cui si sta tentando di parlare di non utilizzare SNI (o è necessario disabilitare la verifica TLS per tali host).
  • Non si può dire a OpenSSL di preferire una catena più corta, ma ancora affidabile, sulla catena che gli è stata data esplicitamente dal server. Ciò significa che alcuni server che potrebbero altrimenti essere convalidati avranno esito negativo se l'archivio certificati sottostante rimuove i deboli certificati radice a 1024 bit.
  • Su Python ancora più vecchi (2.6) non è possibile impostare i codici, il che significa che si è bloccati con qualsiasi OpenSSL utilizzato come predefinito (spesso risultante in scelte non sicure o meno di quelle ottimali).

Per quanto riguarda ciò che dovresti fare, dipende solo da te.Se stai installando da PyPI stesso molte di queste cose semplicemente non contano molto perché le disabilitiamo sul lato server invece di affidarci ai client per implementarle. Tuttavia, le richieste (il pip della libreria sottostante utilizza per accedere a un repository) solleva questi avvertimenti (e pip non li silenzia) perché PyPI spesso non è l'unico posto dove ci si connetterà e quei posti aggiuntivi potrebbero o meno prendere il stesse precauzioni che ha PyPI.

Fonte: sono uno sviluppatore di conduttori e amministratore di PyPI.

+0

Interessante, grazie. Quindi sembra una soluzione imperfetta, poiché probabilmente questo problema non è ben noto. Non ne avevo idea fino a quando non ho eseguito una versione recente di pip. Ma sembra che io possa ottenere tutti i pacchetti di cui ho bisogno per fare in modo che i pip funzionino in sicurezza da Pypi, e dovrei essere ragionevolmente sicuro nel farlo, dal momento che hai detto che la maggior parte dei problemi sono stati bloccati dal lato server (anche se non hai detto tutto di loro erano). Quindi, posso installare qualsiasi altra cosa di cui ho bisogno perché pip userà openssl. Doable, ma non sembra l'ideale. L'ecosistema è un po 'caotico. – orblivion

+1

Come indicato [qui] (http://stackoverflow.com/a/29202163), è possibile passare all'utilizzo di 'PyOpenSSL' con' requests' tramite 'pip install request [security]'. In questo modo, si ottiene solo l'avviso per quell'uso di 'pip' e, come menzionato nella risposta di cui sopra, la connessione a PyPI non dovrebbe essere troppo preoccupante in quanto hanno gestito questi problemi di sicurezza lato server. –

0

Ho letto la discussione esistente e ho pensato bene, cosa dovrei fare ora?

Poi ho capito che il problema fondamentale che stavo avendo era che ero su Ubuntu 14.04, e la versione di Python che spedisce è difettosa. Così ho aggiornato a 15.04.

+0

Questo è un peccato, dal 14.04 è un LTS. Non sono desideroso di aggiornamento. – orblivion

+0

Sì, lo è, e mi è piaciuta l'idea di usare LTS. Sono giunto alla conclusione che la realtà è che questi sistemi LTS diventeranno sempre meno sicuri nel tempo, perché anche se forniscono patch di sicurezza, cose del genere non verranno risolte :( – pwaller

Problemi correlati