1. ホーム
  2. python

[解決済み] PythonでSSL証明書を検証する

2023-05-02 12:03:06

質問

HTTPS で企業イントラネットの多くのサイトに接続し、SSL 証明書が有効であること、有効期限が切れていないこと、正しいアドレスに対して発行されていること、などを検証するスクリプトを書く必要があります。 これらのサイトでは、社内の認証局を使用しているので、証明書を検証するための認証局の公開鍵は持っています。

Pythonはデフォルトで、HTTPSを使用するときにSSL証明書を受け入れ、使用するので、たとえ証明書が無効であっても、urllib2やTwistedなどのPythonライブラリは喜んで証明書を使用します。

HTTPS でサイトに接続し、この方法で証明書を検証できるような良いライブラリはどこかにありませんか?

Pythonで証明書を検証するにはどうすればよいですか?

どのように解決するのですか?

バージョン 2.7.9/3.4.3 以降のリリースでは、Python の がデフォルトで は証明書の検証を行おうとします。

これは PEP 467 で提案されており、一読の価値があります。 https://www.python.org/dev/peps/pep-0476/

この変更は、関連するすべての stdlib モジュール (urllib/urllib2, http, httplib) に影響します。

関連するドキュメントです。

https://docs.python.org/2/library/httplib.html#httplib.HTTPSConnection

<ブロッククオート

このクラスは、デフォルトで必要なすべての証明書とホスト名のチェックを実行するようになりました。以前の未検証の動作に戻すには、ssl._create_unverified_context() を context パラメータに渡すことができます。

https://docs.python.org/3/library/http.client.html#http.client.HTTPSConnection

<ブロッククオート

バージョン 3.4.3 で変更されました。このクラスは、デフォルトで必要なすべての証明書とホスト名のチェックを実行するようになりました。以前の未検証の動作に戻すには、ssl._create_unverified_context()をcontextパラメータに渡すことができます。

新しい組み込みの検証は システムが提供する 証明書データベースに基づいています。それに反して が要求する パッケージはそれ自身の証明書バンドルを出荷します。両方のアプローチの長所と短所は 信頼性データベース のセクションで説明されています。 .