Discussion:
[pyar] Acceder a web service SOAP con SSL
Maxi
2018-07-17 15:29:02 UTC
Permalink
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
= ***@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
--
Maximiliano Robaina
Nippur Lagash
2018-07-17 20:33:57 UTC
Permalink
Hola, lo más probable que el servidor no acepte sslv3, solo acepte tlsv1 o
tlsv1.2

Saludos
Post by Maxi
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.
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,
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
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
--
Maximiliano Robaina
_______________________________________________
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
--
Nippur
Mar del Plata
Buenos Aires
Argentina
Nippur Lagash
2018-07-17 20:38:58 UTC
Permalink
https://www.ssllabs.com/ssltest/analyze.html

en esta url verifica el dominio del WS para ver la configuracion SSL

https://stackoverflow.com/questions/42538930/ssl-error-with-python-requests-despite-up-to-date-dependencies

Slds,
Post by Nippur Lagash
Hola, lo más probable que el servidor no acepte sslv3, solo acepte tlsv1 o
tlsv1.2
Saludos
Post by Maxi
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.
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,
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
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
--
Maximiliano Robaina
_______________________________________________
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
--
Nippur
Mar del Plata
Buenos Aires
Argentina
--
Nippur
Mar del Plata
Buenos Aires
Argentina
Maxi
2018-07-18 00:37:49 UTC
Permalink
Hola. Gracias por contestar.
Post by Nippur Lagash
Hola, lo más probable que el servidor no acepte sslv3, solo acepte tlsv1 o
tlsv1.2
Hay forma de saber esto con algun comando?

Lo que me genera dudas es que probando desde Windows con SoapUI funciona.

Y desde ubuntu, con firefox, cargue el certificado y puedeo obtener el wsdl.
No entiendo mucho del tema, seguramente debe ser una pavada.
Post by Nippur Lagash
Saludos
Post by Maxi
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.
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,
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
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
--
Maximiliano Robaina
_______________________________________________
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
--
Nippur
Mar del Plata
Buenos Aires
Argentina
_______________________________________________
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
Nippur Lagash
2018-07-18 12:33:37 UTC
Permalink
Si usas linux tenes el paquete sslscan (creo que tambien hay una versión
para windows)

Slds,
Post by Maxi
Hola. Gracias por contestar.
Post by Nippur Lagash
Hola, lo más probable que el servidor no acepte sslv3, solo acepte tlsv1
o tlsv1.2
Hay forma de saber esto con algun comando?
Lo que me genera dudas es que probando desde Windows con SoapUI funciona.
Y desde ubuntu, con firefox, cargue el certificado y puedeo obtener el wsdl.
No entiendo mucho del tema, seguramente debe ser una pavada.
Post by Nippur Lagash
Saludos
Post by Maxi
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.
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,
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
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
--
Maximiliano Robaina
_______________________________________________
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
--
Nippur
Mar del Plata
Buenos Aires
Argentina
_______________________________________________
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
_______________________________________________
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
--
Nippur
Mar del Plata
Buenos Aires
Argentina
Adrian Pardini
2018-07-18 12:55:51 UTC
Permalink
Post by Maxi
CONNECTED(00000003)
depth=2 C = AR, ST = CABA, CN = CECBA-CA, O = CECBA, OU = Operaciones, mail
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
Y al final me muestra
Verify return code: 19 (self signed certificate in certificate chain)
Buenas, fijate que ahí mismo te dice qué es lo que está fallando: es
un certificado auto-firmado y no lo puede verificar (por tu otro mail
tengo entendido que Firefox te mostró un error y tuviste que agregar
la excepción).

La forma "correcta" de resolver esto sería bajarte el certificado y
pasarselo al Session() para que pueda comprobar que realmente estás
hablando con el servidor que querés. Para salir del paso también podés
pasarle que no verifique nada.

Esto está mejor expllicado al principio de acá:
http://docs.python-zeep.org/en/master/transport.html

Éxito!
--
Adrián Pardini
Cambá - Laboratorio de tecnología
Av. de Mayo 776 2° D, CABA
http://www.camba.coop
Buenos Aires - Argentina
_______________________________________________
Lista de Correo de PyAr - Python Argentina - ***@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
Maxi
2018-07-18 14:15:28 UTC
Permalink
Hola Adrian
Post by Maxi
CONNECTED(00000003)
depth=2 C = AR, ST = CABA, CN = CECBA-CA, O = CECBA, OU = Operaciones,
mail
Post by Maxi
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
Y al final me muestra
Verify return code: 19 (self signed certificate in certificate chain)
Buenas, fijate que ahí mismo te dice qué es lo que está fallando: es
un certificado auto-firmado y no lo puede verificar (por tu otro mail
tengo entendido que Firefox te mostró un error y tuviste que agregar
la excepción).
La forma "correcta" de resolver esto sería bajarte el certificado y
pasarselo al Session() para que pueda comprobar que realmente estás
hablando con el servidor que querés. Para salir del paso también podés
pasarle que no verifique nada.
http://docs.python-zeep.org/en/master/transport.html
​Bueno, eso fue una de las primeras cosas que probé. Ya estoy en la etapa
de prueba de error​ descontrolada y estoy re perdido

Repetí el ejemplo y ahora por me cambio el mensaje de error:

(Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed (_ssl.c:833)'),))

Antes me daba:

Caused by SSLError(SSLError("bad handshake: Error([('SSL routines',
'tls_process_server_certificate', 'certificate verify failed')],)",),))

Donde va especificado el certificado lo estoy apuntando a /etc/ssl/certs/
no se si eso esta bien.

session.verify = '/etc/ssl/certs/certificado.pem'
Éxito!
--
Adrián Pardini
Cambá - Laboratorio de tecnología
Av. de Mayo 776 2° D, CABA
http://www.camba.coop
Buenos Aires - Argentina
_______________________________________________
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
Sebastián Seba
2018-07-18 15:28:21 UTC
Permalink
Post by Maxi
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.
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,
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
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/
--
Sebastián J. Seba (ssebastianj)
Ingeniero en Sistemas de Información
Maxi
2018-07-18 16:00:10 UTC
Permalink
Hola Sebastián,
Post by Sebastián Seba
Post by Maxi
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.
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,
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
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/
Leandro Minatel
2018-07-18 16:59:02 UTC
Permalink
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
Post by Maxi
Hola Sebastián,
Post by Sebastián Seba
Post by Maxi
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.
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,
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
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/
_______________________________________________
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
Maxi
2018-07-18 18:53:08 UTC
Permalink
Hola Leandro,
Post by Leandro Minatel
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)"
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.
​Si, básicamente eso fue lo primero que probé. Lo volví a probar ahora pero
tengo el mismo error.

(Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed (_ssl.c:833)'),))​

​Creo que tiene que ver algo de lo que menciona David en otro mensaje.

Saludos
Post by Leandro Minatel
Slds
Post by Maxi
Hola Sebastián,
Post by Sebastián Seba
Post by Maxi
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.
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,
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
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/
_______________________________________________
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
_______________________________________________
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
David Arch
2018-07-18 17:12:07 UTC
Permalink
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.

Si pones el código que estas usando además de los errores va ser más fácil
diagnosticar el problema.

Saludos
David
Post by Maxi
Hola Sebastián,
Post by Sebastián Seba
Post by Maxi
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.
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,
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
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/
_______________________________________________
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
Maxi
2018-07-18 19:10:45 UTC
Permalink
Hola David,
Post by David Arch
Parece que te falta agregar el certificado de cliente.
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.
Post by David Arch
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
Post by David Arch
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​
Leandro Minatel
2018-07-18 20:04:11 UTC
Permalink
Hola Maxi, si el sitio requiere un certificado de cliente entonces agrega
luego del session.verify:

session.cert = ('path/al/crt', '/path/private_key')

Slds
Post by Maxi
Hola David,
Post by David Arch
Parece que te falta agregar el certificado de cliente.
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.
Post by David Arch
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
Post by David Arch
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​
_______________________________________________
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
Maxi
2018-07-18 20:46:47 UTC
Permalink
Post by Leandro Minatel
Hola Maxi, si el sitio requiere un certificado de cliente entonces agrega
session.cert = ('path/al/crt', '/path/private_key')
​No me funcionó. Hice lo siguiente
Post by Leandro Minatel
Post by Maxi
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')
Post by Leandro Minatel
Post by Maxi
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)')
Post by Leandro Minatel
Slds
Post by Maxi
Hola David,
Parece que te falta agregar el certificado de cliente.
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​
_______________________________________________
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
_______________________________________________
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
David Arch
2018-07-18 22:18:41 UTC
Permalink
El mié., 18 jul. 2018 a las 17:11, Leandro Minatel (<
Post by Leandro Minatel
Hola Maxi, si el sitio requiere un certificado de cliente entonces agrega
session.cert = ('path/al/crt', '/path/private_key')
​No me funcionó. Hice lo siguiente
Post by Leandro Minatel
Post by Maxi
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')
Post by Leandro Minatel
Post by Maxi
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.
Post by Leandro Minatel
Slds
Post by Maxi
Hola David,
El mié., 18 jul. 2018 a las 14:12, David Arch (<
Parece que te falta agregar el certificado de cliente.
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​
_______________________________________________
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
_______________________________________________
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
_______________________________________________
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
Maxi
2018-07-19 15:17:59 UTC
Permalink
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.
Post by David Arch
El mié., 18 jul. 2018 a las 17:11, Leandro Minatel (<
Post by Leandro Minatel
Hola Maxi, si el sitio requiere un certificado de cliente entonces
session.cert = ('path/al/crt', '/path/private_key')
​No me funcionó. Hice lo siguiente
Post by Leandro Minatel
Post by Maxi
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')
Post by Leandro Minatel
Post by Maxi
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.
Post by Leandro Minatel
Slds
Post by Maxi
Hola David,
El mié., 18 jul. 2018 a las 14:12, David Arch (<
Parece que te falta agregar el certificado de cliente.
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​
_______________________________________________
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
_______________________________________________
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
_______________________________________________
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
_______________________________________________
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
Loading...