How to get Python requests to trust a self signed SSL certificate?

前端 未结 7 2036
故里飘歌
故里飘歌 2020-11-27 15:07
import requests
data = {\'foo\':\'bar\'}
url = \'https://foo.com/bar\'
r = requests.post(url, data=data)

If the URL uses a self signed certificate,

相关标签:
7条回答
  • 2020-11-27 15:18

    Setting export SSL_CERT_FILE=/path/file.crt should do the job.

    0 讨论(0)
  • 2020-11-27 15:30

    With the verify parameter you can provide a custom certificate authority bundle

    requests.get(url, verify=path_to_bundle_file)
    

    From the docs:

    You can pass verify the path to a CA_BUNDLE file with certificates of trusted CAs. This list of trusted CAs can also be specified through the REQUESTS_CA_BUNDLE environment variable.

    0 讨论(0)
  • 2020-11-27 15:30

    You may try:

    settings = s.merge_environment_settings(prepped.url, None, None, None, None)
    

    You can read more here: http://docs.python-requests.org/en/master/user/advanced/

    0 讨论(0)
  • 2020-11-27 15:35

    Case where multiple certificates are needed was solved as follows: Concatenate the multiple root pem files, myCert-A-Root.pem and myCert-B-Root.pem, to a file. Then set the requests REQUESTS_CA_BUNDLE var to that file in my ./.bash_profile.

    $ cp myCert-A-Root.pem ca_roots.pem
    $ cat myCert-B-Root.pem >> ca_roots.pem
    $ echo "export REQUESTS_CA_BUNDLE=~/PATH_TO/CA_CHAIN/ca_roots.pem" >> ~/.bash_profile ; source ~/.bash_profile
    
    0 讨论(0)
  • 2020-11-27 15:37

    The easiest is to export the variable REQUESTS_CA_BUNDLE that points to your private certificate authority, or a specific certificate bundle. On the command line you can do that as follows:

    export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem
    python script.py
    

    If you have your certificate authority and you don't want to type the export each time you can add the REQUESTS_CA_BUNDLE to your ~/.bash_profile as follows:

    echo "export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem" >> ~/.bash_profile ; source ~/.bash_profile
    
    0 讨论(0)
  • 2020-11-27 15:37

    Incase anyone happens to land here (like I did) looking to add a CA (in my case Charles Proxy) for httplib2, it looks like you can append it to the cacerts.txt file included with the python package.

    For example:

    cat ~/Desktop/charles-ssl-proxying-certificate.pem >> /usr/local/google-cloud-sdk/lib/third_party/httplib2/cacerts.txt
    

    The environment variables referenced in other solutions appear to be requests-specific and were not picked up by httplib2 in my testing.

    0 讨论(0)
提交回复
热议问题