using requests with TLS doesn't give SNI support
I'm using requests to communicate with a django app but
When I try
requests.get('https://mysite.com', verify=True)
I get the error:
hostname 'mysite.com' doesn't match either of '*.myhost.com', 'myhost.com'
However, when I look at the browser, or http://www.digicert.com/help/ the certificate looks fine and dandy.
My host suggested it was the lack of SNI support from requests (and Github seems to confirm that https://github.com/kennethreitz/requests/issues/749 ). Has anyone found a work-around using requests?
The current version of Requests should be just fine with SNI. Further down the GitHub issue you can see the requirements:
- pyOpenSSL
- ndg-httpsclient
- pyasn1
Try installing those packages and then give it another shot.
EDIT: As of Requests v2.12.1, ndg-httpsclient and pyasn1 are no longer required. The full list of required packages is now:
- pyOpenSSL
- idna
In order for me to get the accepted answer to work, I had to install a bunch of other packages, in this order:
- yum install libffi-devel
- yum install gcc
- yum install openssl-devel
- pip install urllib3
- pip install pyopenssl
- pip install ndg-httpsclient
- pip install pyasn1
Install requests module like this. This will install the security package extras.
pip install requests[security]
Or you can just use Python 2.7.9 and up:
"The entirety of Python 3.4's ssl module has been backported for Python 2.7.9. See PEP 466 for justification."
https://www.python.org/downloads/release/python-279/