복붙노트

[PYTHON] 자체 서명 된 SSL 인증서를 신뢰하도록 Python 요청을받는 방법?

PYTHON

자체 서명 된 SSL 인증서를 신뢰하도록 Python 요청을받는 방법?

import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)

URL이 자체 서명 된 인증서를 사용하면

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

나는 다음과 같이 verify 매개 변수에 False를 전달할 수 있음을 알고있다.

r = requests.post(url, data=data, verify=False)

그러나, 내가하고자하는 것은 디스크상의 공개 키의 복사본에 대한 포인트 요청이며 그 인증서를 신뢰하도록 지시하는 것입니다.

해결법

  1. ==============================

    1.시험:

    시험:

    r = requests.post(url, data=data, verify='/path/to/public_key.pem')
    
  2. ==============================

    2.verify 매개 변수를 사용하면 사용자 정의 인증 기관 번들 (http://docs.python-requests.org/en/latest/user/advanced/)을 제공 할 수 있습니다.

    verify 매개 변수를 사용하면 사용자 정의 인증 기관 번들 (http://docs.python-requests.org/en/latest/user/advanced/)을 제공 할 수 있습니다.

    requests.get(url, verify=path_to_bundle)
    
    >>> requests.get('https://kennethreitz.com', cert=('/path/server.crt', '/path/key'))
    <Response [200]>
    
  3. ==============================

    3.가장 쉬운 방법은 개인 인증 기관이나 특정 인증서 번들을 가리키는 REQUESTS_CA_BUNDLE 변수를 내보내는 것입니다. 명령 줄에서 다음과 같이 할 수 있습니다.

    가장 쉬운 방법은 개인 인증 기관이나 특정 인증서 번들을 가리키는 REQUESTS_CA_BUNDLE 변수를 내보내는 것입니다. 명령 줄에서 다음과 같이 할 수 있습니다.

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

    인증 기관이 있고 다음과 같이 ~ / .bash_profile에 REQUESTS_CA_BUNDLE을 추가 할 때마다 내보내기를 입력하지 않으려는 경우 :

    echo "export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem" >> ~/.bash_profile ; source ~/.bash_profile
    
  4. ==============================

    4.여러 인증서가 필요한 경우는 다음과 같이 해결됩니다. myCert-A-Root.pem 및 myCert-B-Root.pem과 같은 여러 개의 루트 pem 파일을 파일에 연결하십시오. 그런 다음 REQUESTS_CA_BUNDLE var 요청을 ./bash_profile에있는 해당 파일에 설정하십시오.

    여러 인증서가 필요한 경우는 다음과 같이 해결됩니다. myCert-A-Root.pem 및 myCert-B-Root.pem과 같은 여러 개의 루트 pem 파일을 파일에 연결하십시오. 그런 다음 REQUESTS_CA_BUNDLE var 요청을 ./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
    
  5. ==============================

    5.누군가가 https2에 대한 CA (나의 경우 Charles Proxy)를 추가하고자하는 것처럼 여기에 착륙하게된다. 파이썬 패키지에 포함 된 cacerts.txt 파일에 추가 할 수있는 것처럼 보인다.

    누군가가 https2에 대한 CA (나의 경우 Charles Proxy)를 추가하고자하는 것처럼 여기에 착륙하게된다. 파이썬 패키지에 포함 된 cacerts.txt 파일에 추가 할 수있는 것처럼 보인다.

    예 :

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

    다른 솔루션에서 참조 된 환경 변수는 요청에 따라 다르며 내 테스트에서 httplib2에 의해 선택되지 않았습니다.

  6. ==============================

    6.내보내기 설정 SSL_CERT_FILE = / path / file.crt가 작업을 수행해야합니다.

    내보내기 설정 SSL_CERT_FILE = / path / file.crt가 작업을 수행해야합니다.

  7. ==============================

    7.시도 할 수 있습니다 :

    시도 할 수 있습니다 :

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

    자세한 내용은 다음을 참조하십시오. http://docs.python-requests.org/ko/master/user/advanced/

  8. from https://stackoverflow.com/questions/30405867/how-to-get-python-requests-to-trust-a-self-signed-ssl-certificate by cc-by-sa and MIT license