【Python】SSL証明書の検証に必要なCertifiのインストール

プログラミング

「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.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年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の動作確認を説明しました。

タイトルとURLをコピーしました