Requests: Certifi installé, définissez REQUESTS_CA_BUNDLE env var, toujours l'erreur SSL.

Créé le 25 juil. 2013  ·  10Commentaires  ·  Source: psf/requests

J'utilise le module jenkinsapi qui utilise des requêtes sous le capot. Si j'essaie de l'utiliser hors de la boîte, en le pointant sur un serveur jenkins qui utilise SSL, j'obtiens :

SSLError : [Errno 1] _ssl.c:504 : erreur : 14090086 : routines SSL

jenkinsapi ne fournit pas de crochet pour définir verify=False. J'ai essayé d'enregistrer le certificat du serveur jenkins et de définir la variable d'environnement REQUESTS_CA_BUNDLE pour qu'elle pointe dessus, et j'ai toujours la même erreur. J'ai aussi essayé d'installer certifi mais cela ne fait aucune différence.

Je sais que je pourrais pirater le code jenkinsapi mais ce n'est pas satisfaisant car tous les utilisateurs de mon code devraient faire la même chose. Est-ce que je néglige quelque chose ?

Commentaire le plus utile

J'ai rencontré le même problème et le certificat SSL a échoué à vérifier le problème, en examinant le code boto3, j'ai trouvé que REQUESTS_CA_BUNDLE n'était pas défini, j'ai donc résolu les deux problèmes en le réglant manuellement :

from boto3.session import Session
import os

# debian
os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(
    '/etc/ssl/certs/',
    'ca-certificates.crt')
# centos
#   'ca-bundle.crt')

Pour aws-cli, je suppose que la définition de REQUESTS_CA_BUNDLE dans ~/.bashrc résoudra ce problème (non testé car mon aws-cli fonctionne sans)

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE

Tous les 10 commentaires

Pouvez-vous me montrer à quoi ressemblait le certificat enregistré s'il vous plaît ? Il devrait être possible de simplement le coller ici.

Merci d'avoir répondu. J'ai réenregistré le certificat et les choses fonctionnent maintenant.

Mince! J'ai parlé trop tôt. Voici le certificat :

-----COMMENCER LE CERTIFICAT-----
MIIGQDCCBSigAwIBAgIKWQnHpQAAAAAIzjANBgkqhkiG9w0BAQUFADBZMRMwEQYK
CZImiZPyLGQBGRYDY29tMRQwEgYKCZImiZPyLGQBGRYEZWJheTEUMBIGCgmSJomT
8ixkARkWBGNvcnAxFjaUBgNVBAMTDUFNRVItU1NMQ0EtMDIwHhcNMTIxMTE4MDUz
MTA4WhcNMTQxMTE4MDUzMTA4WjB1MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs
aWZvcm5pYTERMA8GA1UEBxMIU2FuIEpvc2UxFDASBgNVBAoTC1BheVBhbCBJbmMu
MQwwCgYDVQQLEwNDRUkxGjaYBgNVBAMTEWZ1c2lvbi5wYXlwYWwuY29tMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwOZj4ezQ/k5vTU6E63uNsP+LZjeg
4kTEUwSzFsRj3NImQdfOrQ7W7S386ep2EZZqmjevO6HBzkaXaYYQ0GSqthdspd53
A8GnLi0q43oFy+kyAc2ItAM0SH/GOt0J+5EUdS12S821WMiwebHInSHINAjexAHN
Sm87yXCyO8mZ3Jzc3+PFraveF9WFmE0NLZUDpEMxq17K3/6iGLsVO/YZkUpaAXNJ
962fGrIZ4xcvK//S903ehloKwQnRCgtNoGCmvsoDftbYye6LfRh/rH3xWFXIUmWG
Wib27ZwAgbyxz2FPcexie4FB/IzbH2l9Tp5rzGWfs1159VmVhQ/L3EJIDQIDAQAB
o4IC7DCCAugwHQYDVR0OBBYEFMkZJD5QaahE21k37UvPIP1VmZ1SMB8GA1UdIwQY
MBAAFLI24M3s4ViBTJbTf1lWAEsUzehVMIIBDQYDVR0fBIIBBDCCAQAwgf2ggfqg
gfeGgb9sZGFwOi8vL0NOPUFNRVItU1NMQ0EtMDIsQ049QU1FUi1TU0xDQS0wMixD
Tj1DRFAsQ049UHVibGljJTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049
Q29uZmlndXJhdGlvbixEQz1jb3JwLERDPWViYXksREM9Y29tP2NlcnRpZmljYXRl
UmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Q
b2ludIYzaHR0cDovL3BraS5jb3JwLmViYXkuY29tL0NlcnREYXRhL0FNRVItU1NM
Q0EtMDIuY3JsMIIBTgYIKwYBBQUHAQEEggFAMIIBPDCBsQYIKwYBBQUHMAKGgaRs
ZGFwOi8vL0NOPUFNRVitU1NMQ0EtMDIsQ049QUlBLENOPVB1YmxpYyUyMEtleSUy
MFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9Y29ycCxE
Qz1lYmF5LERDPWNvbT9jQUNlcnRpZmljYXRlP2Jhc2U/b2JqZWN0Q2xhc3M9Y2Vy
dGlmaWNhdGlvbkF1dGhvcml0eTBbBggrBgEFBQcwAoZPaHR0cDovL3BraS5jb3Jw
LmViYXkuY29tL0NlcnREYXRhL0FNRVItU1NMQ0EtMDIuY29ycC5lYmF5LmNvbV9B
TUVSLVNTTENBLTAyLmNydDApBggrBgEFBQcwayYdaHR0cDovL3BraS5jb3JwLmVi
YXkuY29tL29jc3AwIQYJKwYBBAGCNxQCBBQeEgBXAGUAYgBTAGUAcgB2AGUAcjAL
BgNVHQ8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEFBQAD
ggEBAFj5s9SdtRpXLz03BjPFsDvQPzoyML9ngHL5zyYMlotUpD7d+aO41Q2E2+LO
REfbd3NAnLT3MfWMHAxNaZ4TRUog1fFJmLJxHTBax5fpmY8YAhiPjQIO+IZOUZO3
4lAwXKsq4ylWS2tlbxL56mPngN2EzLisWgIZqJSx9zd1K/LvKyvs/R3wxBerhTN5
LyHFf9/ByUhaqgIE8jydM4qiS8o3zxjrPAIbi6lnZjktkguYTSAKDoHb17BkNoPr
mU1xDtD1/FuX22dfHpqmJSYVubPVfUTvGB3julT2GNNREoHsQI7wmgFBEMaTdvJq
42DUnHIK0pdMzb2urxL/toZ3mHY=
----- CERTIFICAT DE FIN-----

Traceback (appel le plus récent en dernier) :
Fichier "goals.py", ligne 3, dans
J = api.Jenkins('https://fusion.[SUPPRIMÉ].com/jenkins/')
Fichier "C:\python27\lib\site-packages\jenkinsapi\jenkins.py", ligne 35, dans init
JenkinsBase. init (auto, baseurl)
Fichier "C:\python27\lib\site-packages\jenkinsapi\jenkinsbase.py", ligne 27, dans init
self.sondage()
Fichier "C:\python27\lib\site-packages\jenkinsapi\jenkinsbase.py", ligne 49, dans le sondage
self._data = self._poll()
Fichier "C:\python27\lib\site-packages\jenkinsapi\jenkinsbase.py", ligne 53, dans _poll
retourner self.get_data(url)
Fichier "C:\python27\lib\site-packages\jenkinsapi\jenkinsbase.py", ligne 57, dans get_data
réponse = demandeur.get_url(url)
Fichier "C:\python27\lib\site-packages\jenkinsapi\utils\requester.py", ligne 59, dans get_url
return request.get (url,








Fichier "C:\python27\lib\site-packages\requests\adapters.py", ligne 331, en envoi
lever SSLError(e)
request.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086 :SSL routines:SSL3_GET_SERVER_CERTIFICATE :le certificat a échoué

Pourriez-vous essayer de vous connecter en utilisant directement les requêtes, sans passer par jenkinsapi mais en passant le certificat, vous passez aux requêtes.

r=requests.get(url,verify=certfile)

SSLError : [Errno 1] _ssl.c:504 : erreur : 14090086 : routines SSL

r=requests.get(url,cert=certfile)

SSLError : [Errno 336265225] _ssl.c:351 : erreur : 140B0009 : routines SSLbibliothèque PEM

Cela signifie-t-il que je suis censé avoir la clé privée ? Je doute que les propriétaires de serveurs me le permettent.

Désolé, ignorez la deuxième partie - j'ai compris que spécifier "cert" consiste à vous authentifier auprès du serveur, ce qui n'est pas le problème ici.

Maintenant, nous savons que le problème réside dans le cert :-)
Étant donné que le certificat provient de l'autorité de certification et non du serveur lui-même : la chaîne de poussée est-elle complète ?
Vous devriez voir cette chaîne dans votre navigateur où vous avez exporté le cert.
Pour vérifier une demande de certificat, une chaîne complète est nécessaire. Le dernier élément est envoyé par le serveur, je suppose que vous n'avez enregistré que le certificat racine dans un fichier.
Vous avez toujours besoin de tous les certificats entre la racine et la feuille. Ceux-ci peuvent être envoyés par le serveur avec le certificat feuille, ou vous devriez pouvoir les ajouter au fichier de certificat.

Merci - j'ai enfin réussi à le faire fonctionner ! Pour résumer, au cas où cela serait utile à quelqu'un d'autre : j'avais besoin d'exporter chaque certificat de la chaîne du serveur lui-même vers la racine, en enregistrant chacun au format base64, puis de copier tous les certificats dans un seul fichier et de définir l'environnement variable REQUESTS_CA_BUNDLE pour y pointer.

Merci encore pour votre aide!

Pour les autres Googleurs, vous pouvez désactiver la vérification SSL dans jenkinsapi en utilisant :

from jenkinsapi.jenkins import Jenkins
from jenkinsapi.utils.requester import Requester

j = Jenkins(base_url, requester=Requester(username, password, baseurl=base_url, ssl_verify=False))

J'ai rencontré le même problème et le certificat SSL a échoué à vérifier le problème, en examinant le code boto3, j'ai trouvé que REQUESTS_CA_BUNDLE n'était pas défini, j'ai donc résolu les deux problèmes en le réglant manuellement :

from boto3.session import Session
import os

# debian
os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(
    '/etc/ssl/certs/',
    'ca-certificates.crt')
# centos
#   'ca-bundle.crt')

Pour aws-cli, je suppose que la définition de REQUESTS_CA_BUNDLE dans ~/.bashrc résoudra ce problème (non testé car mon aws-cli fonctionne sans)

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE
Cette page vous a été utile?
0 / 5 - 0 notes