[pyar] Acceder a web service SOAP con SSL

Leandro Minatel leandro en minatel.com.ar
Mie Jul 18 13:59:02 -03 2018


Hola Maxi,

hace un par de dias tuve que lidiar con el mismo tema pero con otra
herramienta de desarrollo. Me gusta mucho python pero no le puedo dedicar
el tiempo que quisiera. En resumen, todavia no alcanzo el escalon de novato
pero me interesa investigar algunos temas.

En tu caso particular, con certificados de servidor autofirmados, vas a
necesitar el certificado raiz.Lo podes obtener con Firefox: Vas al sitio y
cuando tengas la pagina de "La conexion no es segura" haces clic en
"Avanzadas" y luego en "Agregar excepcion". En la ventana que te aparece
haces clic en el boton "Ver" y luego solapa "Detalles". Boton "Exportar..."
y lo guardas como tipo "Certificado con cadena X.509 (PEM) (*.crt;*.pem)"

Una vez que tengas el .crt (PEM), pones algo asi:

session = Session()
session.verify = ' ruta/al/archivo/descargado/desde/ff.crt'
transport = Transport(session=session)
client = Client('https://servidor_de_prueba/webservice?wsdl',
transport=transport)

Contame como fue.

Slds


On Wed, Jul 18, 2018 at 1:01 PM Maxi <maxirobaina en gmail.com> wrote:

> Hola Sebastián,
>
> El mié., 18 jul. 2018 a las 12:29, Sebastián Seba (<ssebastianj en gmail.com>)
> escribió:
>
>> El 17 de julio de 2018, 12:29, Maxi<maxirobaina en gmail.com> escribió:
>>
>>> Hola,
>>>
>>> Estoy intentando acceder al un webservice con SOAP. Para esto estoy
>>> usando zeep [1] y  python 3.6 en Ubuntu 16.04
>>> El servicio al que quiero acceder usa SSL y además una validación de
>>> usuario y contraseña. Me base en los ejemplos de la documentación para
>>> hacer las pruebas.
>>>
>>> EL problema es que me esta dando en siguiente error:
>>>
>>> Caused by SSLError(SSLError("bad handshake: Error([('SSL routines',
>>> 'tls_process_server_certificate', 'certificate verify failed')],)",),))
>>>
>>> Entonces lo que intente hacer si éxito es probar directamente desde la
>>> consola con el cliente openssl y obtengo la siguiente salida (son solo las
>>> primeras lineas)
>>>
>>> CONNECTED(00000003)
>>> depth=2 C = AR, ST = CABA, CN = CECBA-CA, O = CECBA, OU = Operaciones,
>>> mail = computos en mail.com.ar
>>> verify error:num=19:self signed certificate in certificate chain
>>> 140109698238104:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert
>>> handshake failure:s3_pkt.c:1487:SSL alert number 40
>>> 140109698238104:error:140790E5:SSL routines:ssl23_write:ssl handshake
>>> failure:s23_lib.c:177:
>>>
>>> Y al final me muestra
>>> Verify return code: 19 (self signed certificate in certificate chain)
>>>
>>> Por todo esto estoy viendo que el problema no estaría precisamente en
>>> como estoy usando zeep sino algo que no tengo bien configurado en mi
>>> máquina.
>>>
>>> Si pueden iluminarme en que puedo estar haciendo mal se los agradecere
>>>
>>>
>>> Saludos
>>>
>>>
>>> [1]  http://python-zeep.readthedocs.io
>>>
>>>
>>
>> Al parecer el certificado SSL que está utilizando el servidor es del tipo
>> "auto-firmado" y no se encuentra firmado por una Certificate Authority (CA)
>> de confianza.
>> Ubuntu tiene el paquete "ca-certificates" [0] actualizado con los
>> certificados más comunes.
>>
>> Una forma más complicada (entre comillas) para evitar lidiar con
>> certificados auto-firmados es utilizar certificados provistos por Lets
>> Encrypt [1] o aún más sencillo es
>> utilizar el servicio de Cloudflare que provee certificados de manera
>> gratuita. En httpsiseasy.com hay videos con ejemplos de cómo utilizar
>> Cloudflare y HTTPS.
>>
>> [0] https://launchpad.net/ubuntu/xenial/+source/ca-certificates
>> [1] https://letsencrypt.org/
>>
>>
>
> ​Si, en este caso en particular es un certificado para acceder a un server
> de prueba, supongo que por eso usan este certificado autofirmado.
> El certificado me lo da la gente que administra el servicio, no lo manejo
> yo.
>
> ¿Que puede estar haciendo distinto Windows que, usando la aplicación
> SoapUI [1] bajo Windows si funciona ?
>
> No entiendo si es el cliente (en este caso mi script python) el me esta
> objetando el certificado o es el server que me lo rechaza.
> Como mencione en el primer mail del hilo, usando el cliente de openssl
> tampoco me funciona por lo que descarto que sea python el problema.
> También aclaro que registre copie el .crt a
> /usr/local/share/ca-certificates  y luego actualice el store
> con update-ca-certificates
>
>
> [1] https://www.soapui.org/
>
>
>
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180718/73ab9c28/attachment.html>


Más información sobre la lista de distribución pyar