Python 2.7.9: Novedades en la Versión 2.7.9 de Python
Python 2.7.9 es una versión de mantenimiento de Python 2.7, que se lanzó el 20 de agosto de 2014. Esta versión incluye varias novedades importantes, como:
- El módulo ssl de Python 3.4 se ha retroportado a Python 2.7.9. Esto proporciona compatibilidad con los protocolos TLS 1.2 y TLS 1.3.
- SSLv3 se ha deshabilitado de forma predeterminada en httplib y sus dependencias inversas. Esto se debe al ataque POODLE, que es una vulnerabilidad de seguridad en SSLv3.
- El módulo ensurepip se ha retroportado a Python 2.7.9. Este módulo proporciona el administrador de paquetes pip en todas las instalaciones de Python 2.7.
Cambios en el módulo ssl
El módulo ssl de Python 2.7.9 es idéntico al módulo ssl de Python 3.4. Esto significa que los programas escritos para Python 3.4 también funcionarán en Python 2.7.9.
Los principales cambios en el módulo ssl incluyen:
- Soporte para los protocolos TLS 1.2 y TLS 1.3.
- Deshabilitación de SSLv3 por defecto.
- Mejoras en el rendimiento y la seguridad.
Cambios en httplib
El módulo httplib de Python 2.7.9 deshabilita SSLv3 por defecto. Esto se debe al ataque POODLE, que es una vulnerabilidad de seguridad en SSLv3.
Para habilitar SSLv3, se puede establecer el valor del parámetro protocols
del objeto HTTPConnection
. Por ejemplo:
import httplib
conn = httplib.HTTPConnection("www.example.com")
conn.protocols = ("TLSv1", "SSLv3")
conn.request("GET", "/")
Cambios en el módulo ensurepip
El módulo ensurepip de Python 2.7.9 proporciona el administrador de paquetes pip en todas las instalaciones de Python 2.7.
Antes de Python 2.7.9, era necesario instalar pip por separado. Ahora, pip ya está instalado por defecto en todas las instalaciones de Python 2.7.
Conclusión
Python 2.7.9 es una versión de mantenimiento que incluye varias novedades importantes. Estas novedades mejoran la compatibilidad, la seguridad y el rendimiento de Python 2.7.
Ejercicio
Implementa un programa que utilice el módulo ssl para conectarse a un servidor web. El programa debe utilizar el protocolo TLS 1.2 o TLS 1.3.
Solución
import ssl
import socket
def main():
host = "www.example.com"
port = 443
# Crea un objeto socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Establece una conexión con el servidor web
sock.connect((host, port))
# Crea un objeto SSLContext
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
# Crea un objeto SSLSocket
ssl_sock = ctx.wrap_socket(sock)
# Envia una solicitud GET al servidor web
ssl_sock.sendall("GET / HTTP/1.1\r\nHost: {}\r\n\r\n".format(host))
# Recibe la respuesta del servidor web
data = ssl_sock.recv(1024)
# Imprime la respuesta del servidor web
print(data)
if __name__ == "__main__":
main()
Este programa se conectará al servidor web www.example.com en el puerto 443 utilizando el protocolo TLS 1.2. El programa enviará una solicitud GET al servidor web y luego imprimirá la respuesta del servidor web.