テクノロジー · 実用ガイド
Python SSLCertVerificationError:trust を変える前に証明書の所有者を特定する
検証を有効に保ち、要求名、SNI、peer SAN、issuer、proxy 経路、実際の CA bundle を記録して、本当の所有者だけを修正します。

SSLCertVerificationError は単一原因ではありません。chain、期限、clock、hostname、IP URL、virtual host、HTTPS proxy、CA path のどこでも発生します。
最初の操作は verify=False ではありません。同じ process と network path で再現し、誰に要求し、誰が応答し、どの identity と trust store が使われたかを記録します。
失敗した request を固定する
完全な URL と port、Python/OpenSSL と library の version、proxy 環境変数、verify または CA 設定、完全な例外を記録します。証拠を CERTIFICATE_VERIFY_FAILED 一語に縮めません。
同じ process identity と network path で再現します。browser、curl、container、scheduled job、virtual environment は異なる proxy や trust store を使う場合があります。
chain の前に endpoint を特定する
URL hostname、接続 IP、SNI hostname、HTTP Host header を別々に記録します。通常は一致しますが、IP URL、proxy tunnel、custom adapter では分離します。
TLS の証明書選択と hostname 検証は HTTP より先です。Host header だけでは IP を期待した TLS identity を DNS 名へ変えられません。
verification failure を分類する
hostname mismatch では期待名と peer の subjectAltName を比較します。CA 追加では欠けた名前を修正できません。chain error では issuer path と実際に読み込まれた CA bundle、期限 error では runtime clock も確認します。
issuer が origin ではなく企業 security 製品なら、承認済み HTTPS proxy が有効か確認します。企業 CA の信頼は managed environment の policy 判断です。
所有者だけを修正する
SAN に production DNS 名がなければ server、誤った identity を要求したなら URL/SNI、意図した proxy が所有者なら routing または承認 CA、process が CA を未読なら library 設定を修正します。
一度に一つだけ変更し verify=True を保ちます。private CA は専用 Session または PoolManager に限定します。
成功と拒否を両方証明する
同じ request を再実行し、peer subject、SAN、issuer、期待名、CA source、proxy 状態を記録し、応答が目的 service のものか確認します。
wrong hostname、未承認 root、または失敗すべき proxy 無効経路の negative test を追加し、拒否が残ることを証明します。
