15

Python Requestsを使用して、社内のWebページ(https://internal.comなど)のコンテンツを取得したいと思います。このページはブラウザで見ることができ、「証明書を見る」ことができます。

だから今私はリクエストでウェブページを取得したいので、私はします:

import requests
requests.get('https://internal.com')

しかし、SSLErrorが発生します。

SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

だから私は証明書ファイルを指定する必要があると思います:

requests.get('https://example.com', cert=('/path/server.crt', '/path/key'))

しかし、証明書ファイルへのパスを見つけるにはどうすればよいですか?Webページを表示しているときにChromeまたはIEからこの情報を取得できますか?それとも、もっと基本的なものが欠けていますか?

4

2 に答える 2

11

このcertパラメーターは、クライアント側の認証用です。サーバーに身元を証明したい場合。これが問題である場合は、サーバーでエラーが発生します。

必要なのはサーバー側の認証です。サーバーは、そのIDを証明する必要があります。内部サーバーに接続しているため、リクエストにはこのサーバー証明書が付属のバンドルに含まれていないため、サーバーのIDを確認できません。内部CAバンドルを使用してリクエストを提供する必要があります。これを行うには、最初にブラウザから抽出する必要があります。

ドキュメントから:

You can also pass "verify" the path to a "CA_BUNDLE" file for private certs.
You can also set the "REQUESTS_CA_BUNDLE" environment variable.

Chrome(ショートバージョン):

  • これをURLバーに入れてくださいchrome://settings/certificates
  • タブ「権限」を選択します
  • 内部CAを見つけて、をクリックしますexport
  • 最適な形式は「Base64でエンコードされた証明書チェーン」です
  • あなたがそれを再び見つける場所に保存してください
  • これで、 `request.get(url、verify =)を使用できます

次の方法で証明書マネージャーにアクセスすることもできます。

(Chromeの手順、他のブラウザの場合と非常によく似ています)

  • 設定に移動
  • 下部にある[詳細設定を表示]をクリックします
  • HTTPS/SSL->「証明書の管理」
  • 上記を参照
于 2013-02-08T15:38:19.033 に答える
0

crtをエクスポートするときは、ファイルタイプで[名前を付けて保存]ドロップダウン[チェーン付きでエクスポート]を選択してください。これにより、3つすべての証明書が1つになります。それが私の問題でした。

于 2019-11-20T15:51:20.430 に答える