pip: cert a échoué, mais curl fonctionne
Nous avons installé à la racine de notre cert sur le client, et la connexion https fonctionne pour curl
.
Mais si nous essayons de l'utiliser pip
, il échoue:
Could not fetch URL https://installserver:40443/pypi/simple/pep8/:
There was a problem confirming the ssl certificate:
<urlopen error [Errno 1] _ssl.c:499: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed>
Le cert est sur le client. Voir:
(foo_fm_qti)foo_fm_qti@vis-work:~$ curl -v https://installserver:40443/pypi/simple/pep8/
* About to connect() to installserver port 40443 (#0)
* Trying 127.0.0.1... connected
* Connected to installserver (127.0.0.1) port 40443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs/
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using DHE-RSA-AES256-SHA
* Server certificate:
* subject: C=DE; ST=Sachsen; L=Chemnitz; O=FOO-COM GmbH; OU=DV; CN=gray.foo-com.lan; emailAddress=info@foo-com.de
* start date: 2013-09-09 10:47:50 GMT
* expire date: 2019-05-24 10:47:50 GMT
* subjectAltName: installserver matched
* issuer: C=DE; ST=Sachsen; L=Chemnitz; O=FOO-COM GmbH; CN=FOO-COM Root CA; emailAddress=info@foo-com.de
* SSL certificate verify ok.
> GET /pypi/simple/pep8/ HTTP/1.1
Version: pip 1.4.1
Vous devez vous connecter pour publier un commentaire.
Malheureusement pip ne pas utiliser le système certs, mais curl n'.
J'ai trouvé une solution:
Ce n'est pas agréable (curl et les autres bibliothèques de trouver le cert sans l'ajout d'un paramètre), mais fonctionne.
Si vous ne souhaitez pas utiliser l'argument de ligne de commande, vous pouvez définir le cert ~/.pip/pip.conf:
Ma solution est de télécharger
cacert.pem
de http://curl.haxx.se/ca/cacert.pemet ajouter le chemin d'accès pour
cacert.pem
à~/.pip/pip.conf
comme guettli suggéréJ'utilise:
PIP toujours valide le certificat de connexions HTTPS (et tous les pypi paquets de redirection vers HTTPS).
L'algorithme pour la détermination de la CA de fichier est basé sur 3 étapes:
(dans mon cas, ce fichier s'est avéré pour être mis à jour, comme je l'ai fais construire sur un très vieux distribution linux)
Noter que pep ne pas utiliser le SSL par défaut des répertoires et des fichiers (à partir de ssl.get_default_verify_paths()). Mais ne prend en charge groupés CA fichier.
PIP prend en charge une action en ligne de commande pour lister les fichier empaqueté à partir de l'étape 3 et c'est ce que j'utilise pour cette réponse.
pip install pep8
ligne nécessaire?Pour moi, aucun des config-file des solutions de contournement travaillé. Je suis en utilisant pip 1.5.4 sur Ubuntu 14.04
La commande posté par @arjenve ne fonctionne pas sur mon système. J'obtiens:
/usr/bin/python: No module named _vendor.requests
Mise à JOUR
Une solution encore meilleure que ma première solution est d'installer le certificat sur le système (pour moi sur ubuntu ce serait)
La précédente met automatiquement à jour le fichier bundle (à vérifier au bas de
/etc/ssl/certs/ca-certificates.crt
vous devriez maintenant voir le même certificat que dansmy_cert.crt
)Maintenant à l'exportation que son chemin d'accès dans
PIP_CERT
et l'ajouter à votre.bashrc
:ÂGÉES SOLUTION DE CONTOURNEMENT
Ma solution a été de créer un fichier de regroupement de
/etc/ssl/certs/ca-certificates.crt
et mon entreprise crt (juste concaténés les deux fichiers). Et puis exporter une variable (le mettre sur mon.bashrc
) comme ceci: