[解決済み] Python SSL証明書検証エラー
質問
RESTful APIにアクセスするためにrequestsを使用しています。 すべてうまくいっているように見えます。 私は認証し、セッショントークンを引き出し、私がAPI用に書いたクラスのメソッドをユニットテストすることさえできます。 そして、私は自分のコードを実行しようとしました。
まず、私が行っている呼び出しはこちらです。 ヘッダーはセッションに関連する静的な項目で イニット (). ボディは、ファイルのデータから動的に構築され、この関数に渡されます。 データはすべて有効です。
response = requests.post(url, headers=(Requestheader), data=json.dumps((Requestbody)))
このコードを実行すると、私が提供したメタデータで100をはるかに超えるレコードが更新されます。 150件目あたりで、次のようになります。
ssl.SSLCertVerificationError: [ssl: certificate_verify_failed] (証明書の検証失敗) 証明書の検証に失敗しました: 証明書内の自己署名証明書 チェーン (_ssl.c:1045)
私の最初のステップは、ベンダーに電話をして、すべてのウェブサーバーが適切に署名された証明書を持っているかどうかを確認することでした。 彼らはこのようなことはないと言っています。
それから、このメッセージをググってみたら、verify kwargというのがあることがわかったので、試してみたんです。
response = requests.post(url, headers=Requestheader, data=json.dumps(Requestbody), verify=False)
これは長期的には理想的ではないことは分かっていますが、動作が同じかどうかテストしてみたかったのです。 それは同じことをしました。 しばらく実行した後、sslエラーを投げました。 verify=Falseの考え方は、チェックしないことだと思ったのですが。
ベンダーから、使っているurlを確認するように言われましたが、大丈夫です。 もしプロキシサーバーや本当の中間者攻撃が問題を起こしているならば、失敗する前に何度も成功を見ることはないと思うのですが。 このような場合、「401」ステータスを投げる必要があり、私の活動レベルが高すぎるため、非活動時のタイムアウトが発生しているのではないかと考えました。
私はpythonの素人であり、セキュリティのプロではありません。 提案をお願いします。
どのように解決するのですか?
つまり、この問題には3つの解決策があると私は考えています。
-
証明書はOKで、コードに何か問題がある。で説明されているような準備されたリクエストを使用している時などに問題が発生する可能性があります。 この解決策
しかし、あなたが提供したスニペットでは、そのようなメソッドは使用されていないため、あなたのケースとは思えません。次の2つのバリエーションについては、エラーを引き起こすURLを取得し、その証明書を調査する必要があります(ブラウザ経由で可能)。
-
証明書はOKだが、その証明書に署名した認証局が、requestsライブラリで利用するCAリストに含まれていない。問題のあるURLを開いたら、その中のCAを確認し、その日付が有効かどうか、また、そのCAが これ のリストで確認できます。もしそうでなければ、リクエストライブラリの信頼できるリストにCAを追加してください -- この質問への回答で説明しています。 StackOverflowの質問 .
-
証明書が有効でない、または自己署名されている。2と同じ解決方法です。
一般的な解決策は、スクリプトを
try except
節を使用し、間違いが発生する URL をすべてプリントアウトします。そして、それらを一つずつリクエストライブラリ経由でリクエストしてみて、問題が発生するかどうかを確認します。発生した場合は、(2)または(3)のケースです。そうでない場合 - pythonとrequestsが新しくインストールされた別のマシンでスクリプトを実行してみてください。実行が成功するならば、あなたの設定に何らかの問題があるのです。
関連
-
[解決済み] TypeError: append() に 1 つの必須位置引数がない: 'values'
-
[解決済み] エアフロースケジューラーを再起動する
-
[解決済み] Python3.7でpip3 psycopg2を実行しようとするとエラー: pg_config executable not foundが発生します。
-
[解決済み] CrontabでpythonのsubPrrocess経由で使用するmailxを呼び出せない。
-
[解決済み] ImportError: 'sklearn.externals' から名前 'joblib' をインポートすることができません。
-
[解決済み] pythonでrequestsを使用する際にローカルの発行者証明書を取得できない
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み】Python - n+nn+nnn+nnnの値を与えられた桁をnの値として計算する方法
-
[解決済み】自己署名付きlocalhost証明書をChromeが受け入れるようにする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Virtualenv - workon コマンドが見つかりません。
-
[解決済み] Process finished with exit code 1」とはどういう意味ですか?
-
[解決済み] numpy.ndarrayに渡されるサポートされていないフォーマット文字列
-
[解決済み] 2次元リストを行と列で印刷する
-
[解決済み] pygame: pygame.KEYDOWNが動作しない
-
[解決済み] ImportError: libcublas.so.9.0: 共有オブジェクトファイルを開くことができない
-
[解決済み] Radd法によるクラス間加算
-
[解決済み] 'python3' は内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
[解決済み] python3のdateutil.parserの代わりとなるものは何ですか?
-
[解決済み] スクレイピングで何が間違っているのでしょうか。私のコードのために値を返さない