It's the Python 3.4 standard ssl module API implemented on top of
pyOpenSSL:
import backports.ssl as ssl
import socket
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
context.verify_mode = ssl.CERT_REQUIRED
conn = context.wrap_socket(socket.socket(socket.AF_INET))
conn.connect(('google.com', 443))
print conn.getpeercert()
conn.close()
Because the latest web technologies should be available to those running older versions of Python.
Isn't this obsoleted by PEP 466?
If you're on Python 2.7, then probably. But PEP 466 doesn't cover Python 2.6,
3.2, or 3.3, and the ssl.RAND_*() functions are explicitly out of scope.
This package supports it all.
Monkey-patching support is included a la gevent:
import backports.ssl.monkey as monkey
import requests
monkey.patch()
requests.get('https://google.com')
Like the standard ssl module, certain attributes will not be available if
your OpenSSL does not support them. See Installing OpenSSL for instructions.
- Verify that we play nicely with gevent's monkey-patching.
- Backport and pass the standard Python
ssltest suite. - If not that, automate testing against hyper, urllib3, requests, and Tornado test suites.
- Use the bundled 3.x OpenSSL, if available and newer than the default.