[pyar] Acceder a web service SOAP con SSL

Maxi maxirobaina en gmail.com
Jue Jul 19 12:17:59 -03 2018


Hola,

Bueno, finalmente lo pude resolver.
Principalmente el problema era que no tengo ni idea de como funciona SSL
:(   jaja

En conclusión el problema estaba en el certificado del lado cliente, al
exportarlo (pasarlo de pfx a pem) no lo estaba haciendo de la forma en que
lo necesitaba y fallaba.
Así que muchas a gracias a todos por su aportes, aprendí un montón.

Saludos.




El mié., 18 jul. 2018 a las 19:19, David Arch (<daviddanielarch en gmail.com>)
escribió:

>
>
> El mié., 18 de jul. de 2018 5:47 p. m., Maxi <maxirobaina en gmail.com>
> escribió:
>
>>
>>
>> El mié., 18 jul. 2018 a las 17:11, Leandro Minatel (<
>> leandro en minatel.com.ar>) escribió:
>>
>>> Hola Maxi, si el sitio requiere un certificado de cliente entonces
>>> agrega luego del session.verify:
>>>
>>> session.cert = ('path/al/crt', '/path/private_key')
>>>
>>
>> ​No me funcionó. Hice lo siguiente
>>
>>
>> >>> from requests import Session
>> >>> from zeep.transports import Transport
>> >>> from zeep import Client
>> >>>
>> >>> session = Session()
>> >>>
>> >>> session.verify = '/home/maxi/temp/certificado.crt'
>> >>> session.cert = ('/home/maxi/temp/AR-E_1_1.crt',
>> '/home/maxi/temp/AR-E_1_1.key')
>> >>> transport = Transport(session=session)
>> >>>
>> >>> client = Client('https://webservicesoap:4443/TEST/Parametros?wsdl',
>> transport=transport)
>>
>> ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
>> (_ssl.c:833)
>>
>> Donde
>>  session.verify = '/home/maxi/temp/certificado.crt'   Es el certificado
>> que exporte del navegador
>>
>>  session.cert = ('/home/maxi/temp/AR-E_1_1.crt',
>> '/home/maxi/temp/AR-E_1_1.key')   Es el certificado que originalmente es
>> .pfx y lo separe en dos con openssl
>>
>> Ahora con
>>  session.verify = False
>>  session.cert = ('/home/maxi/temp/AR-E_1_1.crt',
>> '/home/maxi/temp/AR-E_1_1.key')
>>
>> Caused by SSLError(SSLError(1, '[SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert
>> unknown ca (_ssl.c:833)')
>>
>>
> En session.verify podes poner o bien False, en cuyo caso no te va a hacer
> la verificacion sobre el certificado que te manda el server una vez que
> inicias la conexión (certificado que se usa para encripar todo por SSL) o
> bien el self signed cert que hablábamos antes.
> Eso no tiene nada que ver con la verificación de cliente.
>
> Para la verificación del certificado de cliente tenes que usar el
> certificado que te pasaron.
> Eso lo pones en session.cert, para más info sobre eso tenes que consultar
> la documentación de client side certificates de la lib requests (el session
> es parte de requests)
> http://docs.python-requests.org/en/master/user/advanced/
>
> El problema que estas teniendo ahora seguramente es en el procesamiento
> que le hiciste al certificado que te pasaron.
> Proba exportarlo en algún otro formato sin separarlo o bien separandolo en
> otro formato. Tené en cuenta que tenes que exportarlo sin contraseña.
> Yo siempre use certs en formato .pem sin problema.
>
>
>>
>>
>>
>>
>>>
>>> Slds
>>>
>>>
>>> On Wed, Jul 18, 2018 at 4:11 PM Maxi <maxirobaina en gmail.com> wrote:
>>>
>>>> Hola David,
>>>>
>>>> El mié., 18 jul. 2018 a las 14:12, David Arch (<
>>>> daviddanielarch en gmail.com>) escribió:
>>>>
>>>>> Parece que te falta agregar el certificado de cliente.
>>>>> Parece que tenes dos cosas dando vuelta:
>>>>> 1) El server usa un cert autofirmado
>>>>> 2) El servidor pide un certificado de cliente
>>>>>
>>>>> Para 1 podes o bien agregar el cert a los certs del sistema como decís
>>>>> que ya hiciste o decirle al cliente de Python que no verifique el
>>>>> certificado.
>>>>>
>>>>> Para 2 tenes que poner el path al certificado de cliente en el cliente
>>>>> de Python, este certificado generalmente no es el mismo certificado que
>>>>> agregaste al sistema.
>>>>>
>>>>
>>>>
>>>> ​Creo que por acá viene la mano. En tantas pruebas que hice omiti
>>>> contar algo importante.
>>>> En principio me dieron un certificado (.pfx​) y una contraseña. Ese
>>>> certificado es el que cargue en el navegador (en mi caso en el
>>>> administrador de certificados de Firefox). Cuando lo importe me pidió la
>>>> contraseña de cifrado.
>>>> Luego, cuando quiero acceder a la url del webseervice desde el
>>>> navegador me aparece un form "Solicitud de identificación de usuario"
>>>> pidiendo que seleccione el certificado a usar para identificarme. Luego si
>>>> me dice que la conexión no es segura y agrego la excepción.
>>>>
>>>> Entonces supongo que lo que me esta faltando es indicarle a mi conexión
>>>> desde python todo esto que es en lo que estoy fallando.
>>>>
>>>>
>>>>
>>>>> Si pones el código que estas usando además de los errores va ser más
>>>>> fácil diagnosticar el problema.
>>>>>
>>>>>
>>>> ​El código no es mucho más de lo que esta en la doc de zeep
>>>>
>>>> >>> from requests import Session
>>>> >>> from zeep.transports import Transport
>>>> >>> from zeep import Client
>>>> >>>
>>>> >>>
>>>> >>> session = Session()
>>>> >>> session.verify = '/home/maxi/temp/micertificado.crt'
>>>> >>>
>>>> >>> transport = Transport(session=session)
>>>> >>>
>>>> >>> client = Client('https://webservicesoap?wsdl',
>>>> transport=transport)​
>>>>
>>>> ​Donde session.verify = '/home/maxi/temp/micertificado.crt'   es el
>>>> archivo que exporte desde el navegador.​
>>>>
>>>>
>>>> ​Saludos​
>>>> _______________________________________________
>>>> 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
>>>
>>> _______________________________________________
>>> 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
>>
>>
>>
>> --
>> Maximiliano Robaina
>>
>> _______________________________________________
>> 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
>
> _______________________________________________
> 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



-- 
Maximiliano Robaina
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180719/35769995/attachment.html>


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