I need to use curtom root certificates on the company intranet and loading them in the Mac OS TrustStore (KeyChain) does solve the problem for all browsers and GUI apps.
It seems that it works even with the version of curl
that ships with Mac OS X but it doesn't work with python, even the version that ships with Mac OS 10.12 Sierra (Python 2.7.10)
Still, it seems that I would be hit by:
urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)>
How can I solve this?
Because I encounter this issue in lots and lots of Python tools I would really appreciate if I find a way to avoid it without having to patch them.
Providing the custom CA certificate myself is not an option because I cannot patch tens of Python tools that I use.
Most of the tools are using the requests
library but there are a few that are using the native ssl support in Python directly.
For me
/Applications/Python\ 3.6/./Install\ Certificates
command fails on pip certifi install. I am on mac High Sierra and use python3 so pip somewhat fails and I have to use pip3 instead.So here what I did:
pip3 install --update certify
in a shellNote that you will end up with a cert.pem symbolic link in:
/Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/
If you put the additional certificates in a PEM bundle file you can use these two environment variables to overwrite the default cert stores used by Python openssl and requests.
Please note that this file does not exist, you need to build it yourself.
This is also a problem in Python 3.6 with MacOS Sierrra. I know your use case is different. But I stumbled upon this thread while investigating this problem. So if anyone is also having this article is worth checking out:
http://www.cdotson.com/2017/01/sslerror-with-python-3-6-x-on-macos-sierra/
In a nutshell: Python 3.6 does not rely on MacOS' openSSL anymore. It comes with its own openSSL bundled and doesn't have access on MacOS' root certificates.
You have two options:
Run an install command shipped with Python 3.6
or
Install the certifi package
I chose the first option and it worked.
As an update and datapoint, I ran into this issue running Python 3.7.0 on macOS 10.13.4:
Instructions for solving the problem are in
/Applications/Python\ 3.7/ReadMe.rtf
Following the suggestion there and running
/Applications/Python\ 3.7/Install\ Certificates.command
solved the problem:From the terminal:
Re-starting IPython...