LoginSignup
40
30

More than 3 years have passed since last update.

[youtube-dl] python3のSSLエラー(CERTIFICATE_VERIFY_FAILED)

Posted at

背景

次のようにyoutube-dlのコマンドを叩くと,SSL: CERTIFICATE_VERIFY_FAILEDのエラーが吐かれてしまうことがあります.それについての原因と解決策と書いていきます.

youtube-dl `url`

ERROR: Unable to download webpage: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)> (caused by URLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)')))

どうやらpyhon3.6の不具合で,証明書のパスが通らなくなってしまうことがあるみたいです.
バグの詳細が気になる方はpython3.6のbugtrackerはこちらです.

解決策1

最も簡単な方法はSSLでエラーが起きているなら,HTTPで通信するということです.
コマンドに--no-check-certificateのオプションをつけることでSSL証明書なしでダウンロードできます.

youtube-dl `url` --no-check-certificate

解決策2

やっぱりSSLで通信したほうがいいよねと思う方もいることでしょう.
証明書のパスが通っていないので,通せばいいだけです.

certifiというパッケージが簡単にpython3.6の証明書の場所を教えてくれます.

pip3 install --upgrade certifi

簡単にpython3のインタプリタでパスを尋ねます.

>>> import certifi
>>> certifi.where()
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/certifi/cacert.pem'

これでpemファイル(SSL証明書)の場所が分かったので,パスを通します.

export SSL_CERT_FILE=/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/certifi/cacert.pem

これでパスが通ったので,無事にSSLのエラーがなく,youtube-dlのコマンドを使うことができます.exportなので,bashrcやzshrcなどに書いておくと便利かもです.

Reference

StackOverflow Certificate Verification Failure for youtube-dl

SSL certificate verify failed #4816

40
30
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
30