「Pythonで利用するルート証明のパスがわからない・・・」
「PythonでSSL証明書の検証を行いたい」
このような場合には、Certifiがオススメです。
この記事では、PythonでSSL通信時に必要となるCertifiについて解説しています。
本記事の内容
- Certifiとは?
- Certifiのシステム要件
- Certifiのインストール
- Certifiの動作確認
それでは、上記に沿って解説していきます。
Certifiとは?
Certifiとは、ルート証明書のリストを提供するPythonライブラリです。
リストの内容は、以下ページで説明されています。
CA/Included Certificates – MozillaWiki
https://wiki.mozilla.org/CA/Included_Certificates
上記リストは、Mozillaが精査した認証局の一覧になります。
このリストをもとに、各サイトのSSL証明書の信頼性を検証可能です。
まとめると、Certifiはルート証明書のリスト情報を扱うことができます。
そして、Certifiを使えば、PythonでSSL証明書の信頼性を検証することが可能になります。
そのため、PythonでWebアクセスを行う場合にCertifiが利用されます。
そもそも、CertifiはRequestsプロジェクトから生まれています。
Requestsについては、次の記事で説明しています。
Requests以外でも、Certifiは多くのライブラリから利用されています。
Webアクセスする上では、SSL通信は基本的には必須と言えますからね。
以下は、1年間におけるパッケージのダウンロード数TOP10です。
これを見ると、Certifiは6番目にダウンロードされたライブラリとなります。
実は、Certifiはそれほどまでに身近なモノだったのです。
上記のダウンロード数TOP10については、次の記事で詳細を説明しています。
以上、Certifiについて説明しました。
次は、Certifiのシステム要件を説明します。
Certifiのシステム要件
現時点(2022年8月)でのCertifiの最新バージョンは、2022.6.15となります。
この最新バージョンは、2022年6月16日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となっています。
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
以下のPython公式開発サイクルとは、若干異なります。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
Python 3.6のサポートは、2021年で終了しています。
そのため、ここではPython 3.7以降の利用を推奨します。
Certifiのシステム要件は、Pythonのバージョンにだけ注意です。
それ以外は、特に気にすることはありません。
以上、Certifiのシステム要件を説明しました。
次は、Certifiのインストールを説明します。
Certifiのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.10.2
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- pip 22.2.2 setuptools 63.4.1 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、Certifiのインストールです。
Certifiのインストールは、以下のコマンドとなります。
pip install certifi
Certifiのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。
$ pip list Package Version ---------- --------- certifi 2022.6.15 pip 22.2.2 setuptools 63.4.1 wheel 0.36.2
Certifiが依存するパッケージは、ありません。
そのため、Certifiは既存環境に容易に導入可能です。
このことが、多くのパッケージに依存される理由でもあるのかもしれません。
以上、Certifiのインストールを説明しました。
次は、Certifiの動作確認を説明します。
Certifiの動作確認
Certifiの動作確認を行います。
動作確認に用いるコードは、以下。
import certifi # ルート証明書のパス print(certifi.where()) # ルート証明書の内容 print(certifi.contents())
コードの処理は、コメントに書いたままです。
認証局(CA)の証明書(ルート証明書)の場所と中身を表示します。
上記を実行した結果は、以下のように表示されます。
'/usr/local/lib/python3.10/site-packages/certifi/cacert.pem' # Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA # Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA # Label: "GlobalSign Root CA" # Serial: 4835703278459707669005204 # MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a # SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c # SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv 〜〜 〜認証局の電子署名が何個も続く〜 〜〜
これは、Certifiのインストールと同時にダウンロードされたルート証明書の情報です。
以上、Certifiの動作確認を説明しました。