27

セキュリティで保護されたサイト (HTTPS) にアクセスするための pycurl スクリプトを作成しようとしています。

c = pycurl.Curl()
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0')
c.setopt(pycurl.URL, 'https://for-example-securedsite')
c.setopt(pycurl.COOKIEFILE, 'cookie.txt')
c.setopt(pycurl.COOKIEJAR, 'cookies.txt')
c.setopt(pycurl.WRITEDATA, file("page.html","wb"))   

以下のエラーが表示されます..

pycurl.error: (60、「SSL 証明書に問題があります。CA 証明書に問題がないことを確認してください。詳細:\nエラー:14090086:SSL ルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書の確認に失敗しました」)

SSL 証明書の取得に失敗したため、コードは失敗しました。

以下の行をコードに追加すると、エラーはなくなりました。

c.setopt(pycurl.SSL_VERIFYPEER, 0)   
c.setopt(pycurl.SSL_VERIFYHOST, 0)

上記のコードは、証明書の検証をスキップします。しかし、「中間者」攻撃を受けます。

ローカルの証明書ストアに SSL 証明書があることはわかっています。証明書をエクスポートしてコードで使用する方法を知っている人はいますか..いくつかのサンプルコードは素晴らしいでしょう..

御時間ありがとうございます!

4

3 に答える 3

24

おっしゃる通り、特に最近の SSL の脆弱性を考えると、あなたのやり方は中間者攻撃の対象になります。次のように解決できます。

import pycurl
curl = pycurl.Curl()
curl.setopt(pycurl.URL, "https://your-secure-website.com/")
curl.setopt(pycurl.SSL_VERIFYPEER, 1)
curl.setopt(pycurl.SSL_VERIFYHOST, 2)
curl.setopt(pycurl.CAINFO, "/path/to/updated-certificate-chain.crt")
curl.perform()

curl には、デフォルトで古い証明書リストが付属しています。更新する場合でも、テスト用に独自の証明書を使用する場合でも、updated-certificate-chain.crt ファイルをアクセス可能な場所に配置し、pycurl.CAINFO オプションを使用してそれを指定してください。

また、pycurl.SSL_VERIFYHOST が最高のセキュリティ チェック設定である 2 に設定されていることを確認してください。

于 2012-10-25T16:05:03.780 に答える
1

SSL 証明書に関するcURL ドキュメントを読みましたか? これはあなたの質問に直接対処しているようです...特に項目2:

 2. Get a CA certificate that can verify the remote server and use the proper
    option to point out this CA cert for verification when connecting. For
    libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

pycurl モジュールにCAPATHオプションが含まれているように見えるので、コードに簡単に実装できるはずです。

于 2011-11-30T20:43:35.980 に答える
0

この問題の解決策は、セキュリティで保護されていない引数を介して「https」ベースのプロトコル URL への curl オブジェクト アクセスを提供することにあります。cmd 端末では、引数「-k」のみを入力します。

Pycurl では、以下の方法で curl オブジェクトに同じオプションを設定する必要があります。最小レベルのセキュリティ、つまり '0' を使用します。

c.setopt(pycurl.SSL_VERIFYPEER, 0)   
c.setopt(pycurl.SSL_VERIFYHOST, 0)

安全でない接続を許可する その後、SSLへのアクセスは何の障害もなく行われます

于 2021-05-26T01:24:22.033 に答える