Requests: Certifi instalado, establezca REQUESTS_CA_BUNDLE env var, todavía aparece el error SSL.

Creado en 25 jul. 2013  ·  10Comentarios  ·  Fuente: psf/requests

Estoy usando el módulo jenkinsapi que usa solicitudes bajo el capó. Si trato de usarlo de fábrica, apuntándolo a un servidor jenkins que usa SSL, obtengo:

SSLError: [Errno 1] _ssl.c: 504: error: 14090086 : rutinas SSL

jenkinsapi no proporciona un enlace para establecer verify = False. Intenté guardar el certificado del servidor jenkins y configurar la variable de entorno REQUESTS_CA_BUNDLE para que apunte a él, y aún así obtuve el mismo error. También intenté instalar certifi pero no hace ninguna diferencia.

Sé que podría piratear el código jenkinsapi, pero eso no es satisfactorio porque todos los usuarios de mi código tendrían que hacer lo mismo. ¿Estoy pasando por alto algo?

Comentario más útil

Encontré el mismo problema y el certificado SSL verificó el problema fallido, al revisar el código boto3, encontré que REQUESTS_CA_BUNDLE no está configurado, así que solucioné el problema de ambos configurándolo manualmente:

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')

Para aws-cli, supongo que configurar REQUESTS_CA_BUNDLE en ~ / .bashrc solucionará este problema (no probado porque mi aws-cli funciona sin él)

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

Todos 10 comentarios

¿Puede mostrarme cómo era el certificado guardado, por favor? Debería ser posible simplemente pegarlo aquí.

Gracias por responder. Volví a guardar el certificado y las cosas están funcionando ahora.

¡Maldita sea! Hablé demasiado pronto. Aquí está el certificado:

----- COMENZAR EL CERTIFICADO -----
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 =
----- CERTIFICADO FINAL -----

Rastreo (llamadas recientes más última):
Archivo "Goals.py", línea 3, en
J = api.Jenkins ('https: // fusion. [CENSURADO] .com / jenkins /')
Archivo "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkins.py", línea 35, en init
JenkinsBase. init (yo, baseurl)
Archivo "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py", línea 27, en init
self.poll ()
Archivo "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py", línea 49, en la encuesta
self._data = self._poll ()
Archivo "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py", línea 53, en _poll
return self.get_data (url)
Archivo "C: \ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py", línea 57, en get_data
respuesta = requester.get_url (url)
Archivo "C: \ python27 \ lib \ site-packages \ jenkinsapi \ utils \ requester.py", línea 59, en get_url
return request.get (url,








Archivo "C: \ python27 \ lib \ site-packages \ orders \ adapters.py", línea 331, en enviar
subir SSLError (e)
request.exceptions.SSLError: [Errno 1] _ssl.c: 504: error: 14090086 : rutinas SSL

¿Podría intentar conectarse usando solicitudes directamente, sin pasar por jenkinsapi pero mientras pasa el certificado, se protege a las solicitudes?

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

SSLError: [Errno 1] _ssl.c: 504: error: 14090086 : rutinas SSL

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

SSLError: [Errno 336265225] _ssl.c: 351: error: 140B0009 : Rutinas SSL

¿Eso significa que se supone que debo tener la clave privada? Dudo que los propietarios del servidor me lo permitan.

Lo siento, ignore la segunda parte: descubrí que especificar "cert" se trata de autenticarse en el servidor, lo cual no es el problema aquí.

Ahora sabemos que el problema radica en el certificado :-)
Dado que el certificado es de la CA y no del servidor en sí: ¿Está completa la cadena de empuje?
Debería ver esta cadena en su navegador donde exportó el certificado.
Para verificar una solicitud de certificado se necesita una cadena completa. El último elemento lo envía el servidor, supongo que solo guardó el certificado raíz en un archivo.
Aún necesita todos los certificados entre la raíz y la hoja. Esos pueden ser enviados por el servidor junto con el certificado hoja, o debería poder agregarlos al archivo de certificado.

Gracias, ¡finalmente lo hice funcionar! Para resumir, en caso de que esto sea útil para otra persona: necesitaba exportar todos los certificados de la cadena desde el servidor mismo a la raíz, guardar cada uno en formato base64, luego copiar todos los certificados en un solo archivo y configurar el entorno variable REQUESTS_CA_BUNDLE para señalarlo.

¡De nuevo, gracias por tu ayuda!

Para otros empleados de Google, puede deshabilitar la verificación SSL en jenkinsapi usando:

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))

Encontré el mismo problema y el certificado SSL verificó el problema fallido, al revisar el código boto3, encontré que REQUESTS_CA_BUNDLE no está configurado, así que solucioné el problema de ambos configurándolo manualmente:

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')

Para aws-cli, supongo que configurar REQUESTS_CA_BUNDLE en ~ / .bashrc solucionará este problema (no probado porque mi aws-cli funciona sin él)

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

JimHokanson picture JimHokanson  ·  3Comentarios

eromoe picture eromoe  ·  3Comentarios

mitar picture mitar  ·  4Comentarios

jake491 picture jake491  ·  3Comentarios

NoahCardoza picture NoahCardoza  ·  4Comentarios