Tenemos un sistema de facturación electrónica que corre en linux.
Hace unos cuantos meses que venimos teniendo un problema con las
versiones de ssl en algunos servidores de producción.
El problema parece ser que algunos sitios https solo aceptan protocolo
SSL v3. No tengo claro porqué desde algunas máquinas funciona y desde
otras es necesario forzar la utilización de la versión 3.
El error se lo puede detectar de la siguiente forma:
{{{
juan@buenosaires ~$ wget
https://servicios1.afip.gov.ar/wsfexv1/service.asmx?WSDL
--2014-09-15 19:07:55--
https://servicios1.afip.gov.ar/wsfexv1/service.asmx?WSDL
Resolviendo servicios1.afip.gov.ar... 200.1.116.53
Conectando con
servicios1.afip.gov.ar[200.1.116.53]:443... conectado.
No responde
y en cambio la siguiente instrucción si responde:
juan@buenosaires ~/src/colofon/client/ui $ wget --secure-protocol=SSLv3
https://servicios1.afip.gov.ar/wsfexv1/service.asmx?WSDL
--2014-09-15 19:08:11--
https://servicios1.afip.gov.ar/wsfexv1/service.asmx?WSDL
Resolviendo servicios1.afip.gov.ar... 200.1.116.53
Conectando con
servicios1.afip.gov.ar[200.1.116.53]:443... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 55131 (54K) [text/xml]
Grabando a: "service.asmx?WSDL.4"
100%[=====================================================================================================================================================>]
55.131 --.-K/s en 0,03s
2014-09-15 19:08:11 (1,68 MB/s) - "service.asmx?WSDL.4" guardado
[55131/55131]
}}}
En las ultimas pruebas que realice el ambiente de homologación se
comporta diferente del de producción respondiendo sin la necesidad de
forzar el uso de ssl v3:
{{{
juan@buenosaires ~$ wget
https://wsWhomo.afip.gov.ar/wsfexv1/service.asmx?WSDL
--2014-09-15 19:05:39--
https://wswhomo.afip.gov.ar/wsfexv1/service.asmx?WSDL
Resolviendo wswhomo.afip.gov.ar... 200.1.116.57
Conectando con
wswhomo.afip.gov.ar[200.1.116.57]:443... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 55125 (54K) [text/xml]
Grabando a: "service.asmx?WSDL.3"
100%[=====================================================================================================================================================>]
55.125 --.-K/s en 0,03s
2014-09-15 19:05:39 (1,76 MB/s) - "service.asmx?WSDL.3" guardado
[55125/55125]
}}}
Habiamos encontrado una solución a esto editando la librería httplib2
para que fuerce el uso de ssl versión 3 de esta forma:
{{{
en /usr/lib/python2.7/site-packages/httplib2/__init__.py
# doesn't expose the necessary knobs. So we need to go with the default
# of SSLv23.
return ssl.wrap_socket(sock, keyfile=key_file, certfile=cert_file,
! cert_reqs=cert_reqs, ca_certs=ca_certs)
except (AttributeError, ImportError):
ssl_SSLError = None
def _ssl_wrap_socket(sock, key_file, cert_file,
--- 77,83 ----
# doesn't expose the necessary knobs. So we need to go with the default
# of SSLv23.
return ssl.wrap_socket(sock, keyfile=key_file, certfile=cert_file,
! cert_reqs=cert_reqs, ca_certs=ca_certs, ssl_version=3)
except (AttributeError, ImportError):
ssl_SSLError = None
def _ssl_wrap_socket(sock, key_file, cert_file,
ssl.wrap_socket hay que llamarlo con ssl_version=3, debería hacerlo de forma automática pero no lo llama con ssl_version=3.
}}}
Este cambio nos soluciono el problema por un tiempo pero resulta que
ahora por algún motivo se rompe la conexión con la url de afip dando
time_out después de transcurrir un determinado tiempo de tener corriendo
el servidor, teniendo que a mano levantar el servidor nuevamente para
que responda la web de afip.
¿a alguien le paso lo mismo? ¿alguna idea de como solucionarlo?
Saludos, Juan Bagnera.