Skip to content

Requests al servidor de Transbank no se realizan por problemas de SSL #29

@rodrigogadea

Description

@rodrigogadea

tbk usa requests para hacer los requests, que utiliza los valores por defecto actuales de openssl y cuando se hace un request al servidor de Transbank de certificación, los mismos fallan al inicio por no poder hacer el handshake de SSL (utilizando tbk@1.0.0rc2).

SSLError at /transbank/payment-start/

[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)

Request Method: POST Request URL: http://192.168.1.33:8000/transbank/payment-start/ Django Version: 1.8.6 Exception Type: SSLError Exception Value:

[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)

Exception Location: /home/rodrigo/.virtualenvs/dartel/lib/python2.7/site-packages/requests/adapters.py in send, line 433 Python Executable: /home/rodrigo/.virtualenvs/dartel/bin/python Python Version: 2.7.10 Python Path:

['/home/rodrigo/wapps/dartel/dartel',
 '/home/rodrigo/.virtualenvs/dartel/lib/python27.zip',
 '/home/rodrigo/.virtualenvs/dartel/lib/python2.7',
 '/home/rodrigo/.virtualenvs/dartel/lib/python2.7/plat-linux2',
 '/home/rodrigo/.virtualenvs/dartel/lib/python2.7/lib-tk',
 '/home/rodrigo/.virtualenvs/dartel/lib/python2.7/lib-old',
 '/home/rodrigo/.virtualenvs/dartel/lib/python2.7/lib-dynload',
 '/usr/lib64/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib64/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-tk',
 '/home/rodrigo/.virtualenvs/dartel/lib/python2.7/site-packages']

Para reproducir, tomado de https://github.com/pedroburon/tbk/blob/1.0.0-rc.2/tbk/kcc/payment.py#L165 para obtener el token para redirigir al servidor de Transbank, en un ipdb:

import requests

TBK_VERSION_KCC = '6.0'

data1 = {'TBK_KEY_ID': 101, 'TBK_CODIGO_COMERCIO': '597026007976', 'TBK_PARAM': '5QWcIkl7aE0PyILFwtrPzC+Zc1dm5CBMyalTtut0yFkrdbK0yGMFiIWbAZS78w2BiYUNqiakjWFo\nocBMLd/mmBYFmk7rWn60qlcbjm788ao+wfNPVmibL/G/dxG8bRzEP6JrbIuUC2yIyCd82GWzWtdY\nwsflOFsnWPG9Nq9AteDP4GkLbm3mqn6LWzlx6Lj4+oJsy7Sdwo+iD/B1MUomgEfbGXB5htPHMRhU\nZ+blsCVSUiIv5MvUTbAwAo2XoTRylGJEji5b4/lF/ORv9t0JE/XA2+yvba2p7LNV636EddfrhqEo\nad2zQXI07UI/YNE1YpmHgr6QzoEKLwHQjz5jPTB2PMSWyWd9cZuZ+eGbk1p7WAbVSSfYwA6sLf6G\nh1KhpgQ3yw+tM/Tk83oDIB8uJ/oXU4o5aS60+whiZqck/bI6ZhBZ69ZQYA/Eu7CRgFI8y1Jrx1e/\n0GLdoPgG/AbmiP1UrmbJPGlpx0TM5Fw7I7HN0oSZYC19ntFwXX6YF72ScoBv68aAp0mC9D1eiUN0\nY9Ov168iaZTY4p706I2YNwEt3K1qSq6oCiEXrrkS94UzpqUj8ZbN3JbzLUCLqhcdPTeW3iBkZEFP\nsAk6qvvGsrCg6pZLafbqDuw5B83F5dVJuXLfWTW1/ZoTY3Jib+Dxv829IsthSZZJ9YQwnvLgCVIX\n0jwC5pIFoM4Qx9/KK07aKciLJKqKIcCejRVxGBQh7RqveFLlKusfEJjAHpRDHBKtzdRNilUl31S3\nKALXm44D+scDg67VGxE2PMWot9c3JnHteqKLXAbJP+Y4eo+yrfUKsDGbUzlU+d36dyLw7RGjw6BE\n7YFpLC/o+FsHcwXDNQkHYfyvC1CX7qPG5vl6OOMAIsdmnTvhkCndT9tf1AlPDqdGaSzy+njenS9I\nGae+tD2ZMbChcQJDCvfkf/m7j1hlhk/NI88JcRgBwjIDw44ao/wEsOGbkYfeFNa6w2D9sbbCUkAh\nHAI4gNTqEoz/uZW11618DzWzJndVVn5CNuqcA7NLCjDOQCJsXrpf7Pt7ZJ5JbPYUFqQANSbcw4er\nBGUzq+KF00Enj/pMWsBnp8GesvmeQwbiUD7z9PmPQlX0TY98pXLMdRcJWoF6xM+dzo6tKmOeEhMW\nfBr/xzJEOFvvCozqNwsHSq0Nax5ouSCBdn/fdLi39iIJUtcEdoToQG8ip/BykMC6/eWYh5mV67XU\nYYkhfjyXWL0xS2uB2wsl9KvYFDdpNLUKN9oiGrZOv8vZ+wYYhvjxwuAIc53zIfbe61QWrhQ8yczB\nJDiDJ+zfV2iBpcFR+itPVAea9oQp8+j1wfp8DbcQmCd3O/8iYq6t1JqtBmd6Yq/0fODboeoLmzQ4\n9qTgCgmGKQAJfb2SmrAyqHkBOTKBhoR9VLSi0V3icS0ID9PoZlXr4spHFDRBpMjXCIYFzdToGd0N\nFnSwWNrf7n1XtKwumvbYNZ7Ng+zMsqzKMN9/MDLWRdts7wE9Pf9psIBRcjwcmjYuXEzd/wdjWBlE\nnS59G6XPl6Z3GtCHSnX6HUDow59ypPAxjPBY0biakCyuZYZrV1lOVW+SeAJPsUVU40dOP3xRE6zd\nqDufTeeNX9mQwz5PgBfs3dKwnFQJLwb66g2cb8fqHNbBjieNvGpw8Lq+i8q17ERkBtFINdgoCjxg\nbdidWCo8eGNfYA+F3fE1gV2Au7w3S/yaW/RgPfNO8XTFEqbRzH8iiGaxU0L+B53B+tVWJNv/4S4L\n+iLw4H2p2KXQk4DlRKI0i9A=\n', 'TBK_VERSION_KCC': '6.0'}

validation_url = 'https://certificacion.webpay.cl:6443/filtroUnificado/bp_validacion.cgi'
headers1 = {'User Agent': 'TBK/6.0 (Python/2.7)'}

requests.post(validation_url, data=data1, headers={'User Agent': USER_AGENT}, allow_redirects=False, verify=False)

En un bash se verifica el handshake error:

openssl s_client -connect certificacion.webpay.cl:6443 -ssl2
openssl s_client -connect certificacion.webpay.cl:6443 -ssl3
  • Posible solución

Hacer que se utilice sólo tls1 para los requests hacia certificacion puedan realizarse, y poder especificar otro para produccion que eventualmente se puede actualizar.

openssl s_client -connect certificacion.webpay.cl:6443 -tls1

Para esto habría que hacer que requests utilice TLS1:

O utilizar requests-toolbelt:

** Obs

  • No está verificado en Python 3 ni contra el servidor de producción de Transbank
  • Firefox se queja del SSL de certificacion también
    srfirefoxcontbk

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions