会社のイントラネットでcurtomルート証明書を使用する必要があり、それらをMac OS TrustStore(KeyChain)にロードすると、すべてのブラウザーおよびGUIアプリの問題が解決されます。
Mac OS Xに同梱されているcurl
のバージョンでも動作するようですが、pythonでは動作しません。 Mac OS 10.12 Sierra(Python 2.7.10)に同梱されているバージョン
それでも、それは私がヒットするようです:
urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)>
多くのPythonツールでこの問題に遭遇するので、パッチを適用せずにそれを回避する方法を見つけていただければ幸いです。
数十のPython使用しているツールにパッチを当てることができないため、自分でカスタムCA証明書を提供することは選択肢ではありません。
ほとんどのツールはrequests
ライブラリを使用していますが、Pythonで直接、ネイティブSSLサポートを使用しているものがいくつかあります。
追加の証明書をPEMバンドルファイルに入れる場合、これら2つの環境変数を使用して、Python openssl and requests。で使用されるデフォルトの証明書ストアを上書きできます。
SSL_CERT_FILE=/System/Library/OpenSSL/cert.pem
REQUESTS_CA_BUNDLE=/System/Library/OpenSSL/cert.pem
このファイルは存在しないため、自分で作成する必要があることに注意してください。
これはPython 3.6 with MacOS Sierrraでも問題です。使用ケースが異なることは知っています。しかし、この問題を調査中にこのスレッドにつまずきました。チェックアウト:
http://www.cdotson.com/2017/01/sslerror-with-python-3-6-x-on-macos-sierra/
一言で言えば:Python 3.6はMacOSのopenSSLに依存しなくなりました。独自のopenSSLがバンドルされ、 MacOSのルート証明書にはアクセスできません。
次の2つのオプションがあります。
Python 3.6に同梱されているインストールコマンドを実行する
cd /Applications/Python\ 3.6/
./Install\ Certificates.command
または
certifiパッケージをインストールします
pip install certifi
最初のオプションを選択しましたが、うまくいきました。
更新とデータポイントとして、私はこの問題に遭遇しましたPython 3.7.0 on macOS 10.13.4:
$ ipython
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import bokeh.sampledata
In [2]: bokeh.sampledata.download()
Using data directory: /Users/me/.bokeh/data
...
SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)
問題を解決するための手順は/Applications/Python\ 3.7/ReadMe.rtf
そこでの提案に従い、/Applications/Python\ 3.7/Install\ Certificates.command
問題を解決しました:
ターミナルから:
$ /Applications/Python\ 3.7/Install\ Certificates.command
IPythonを再起動しています...
$ ipython
>>> import bokeh.sampledata
>>> bokeh.sampledata.download()
Using data directory: /Users/me/.bokeh/data
Downloading: CGM.csv (1589982 bytes)
1589982 [100.00%]
...
Mac brew install python env。
$ python3
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import certifi
>>> certifi.where()
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/certifi/cacert.pem'
>>>
または、コマンドラインから:
$ python -m certifi
次に、cert.pemとしてリンクcacert.pemが必要です
$ ln -s /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/certifi/cacert.pem cert.pem
$ pwd
/Library/Frameworks/Python.framework/Versions/3.7/etc/openssl
rehash
その後、正常に動作します。
私のために /Applications/Python\ 3.6/./Install\ Certificates
コマンドは、pip certifiインストールで失敗します。私はMac High Sierraでpython3を使用しているため、pipは多少失敗し、代わりにpip3を使用する必要があります。
だからここで私がやったこと:
pip3 install --update certify
シェルで次の場所にcert.pemシンボリックリンクが作成されることに注意してください:/Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/
これを実行して、適切な変数を設定します。これは、ここですでに与えられている答えの組み合わせです。 〜/ .bash_profileに入れて永続化します。
CERT_PATH=$(python -m certifi)
export SSL_CERT_FILE=${CERT_PATH}
export REQUESTS_CA_BUNDLE=${CERT_PATH}