Pythonアプリケーションで証明書検証に失敗するエラーが発生する

Pythonアプリケーションで証明書検証に失敗するエラーが発生する

長い間私は使っていましたNVPとしてシンプルなメモ帳私のDebianシステムのクライアントです。最近、私のシステムの1つが突然ネットワークサービスとの同期を停止しました。 APIの変更やそのようなことを考えましたが、別のシステムで同じアプリ(同じバージョン)を試してみましたが、すべてがうまくいきました。

問題のシステムで問題をデバッグした結果、SSL: CERTIFICATE_VERIFY_FAILEDサーバーと通信しようとしたときにシステムでエラーが発生することがわかりました。もっと理解しようとしましたが失敗しました。現在、この問題について私が知っているものは次のとおりです。

  • システム証明書に問題はありません。 Firefoxは問題なくSSL証明書を確認できます。
  • Pythonが証明書を表示できるようにし、python-certifiパッケージをインストールしました。python3-certifi
  • アプリケーションは他の2つのDebianシステムでうまく動作します。これらはすべてDebianテストを実行しており、常に最新の状態です。
  • ソフトウェアのスタンドアロンインストールでも同じエラーが発生するため、アプリケーションは破損せず、インストールディレクトリにエントリを保存しません。

Pythonやキャッシュに関する内容がありませんが、合理的な内容が見つかりませんでした。

アップデート1:

以下は、3つのシステムとWebアプリケーションの監査で要求された情報と結果です。

  • アプリケーションは次の場所にあります。https://simple-note.appspot.com/。例RESTエンドポイントは次のとおりです。https://simple-note.appspot.com/api/login。完全なドメイン名はGoogleのCA機関であるG2で署名されており、証明書は2017年12月6日まで有効です。 RSAを含む2048ビットPKCS#1 SHA-256。
  • 3つのシステムを確認してみると、そのうちの1つが問題のシステムと同じでした(/etc/ssl/certsで確認md5deep)。あるシステムには追加の証明書がありますが、機能するシステムの1つにその証明書がないため、問題はありません。
  • すべてのシステムにpython-certifiパッケージがインストールされています。

結果:3つのシステムはすべて同じ証明書を持ち、そのうちの1つに追加の証明書があります。追加の証明書がないシステムは問題なくインストールされるため、追加の証明書は重要ではありませんnvPY

 アップデート2:

urllib2Python自体が証明書を見つけることができないようです。capath提供されたカスタムコンテキストを使用すると、certifi.where()すべてが正常に戻ります。奇妙なことに、他のシステムではこのカスタムコンテキストは必要ありません。次に、機能しているシステムと機能しないシステムの違いを見てみましょう。

アップデート3:

任意のURLに接続して接続性をテストするための小さなツールを作成しましたが、urllib2奇妙にもうまくいきます。もう1つのことは、問題のあるコードを自分のツールに移植しても問題が発生しないことです(予想どおりに機能します)。問題はnvPYコードベースにあります。バグレポートが開き、この時点から作業が開始されます。

ベストアンサー1

おすすめ記事