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
나는 통과 할 수 있다는 것을 알고 False
받는 사람 verify
과 같이 매개 변수 :
r = requests.post(url, data=data, verify=False)
그러나 내가하고 싶은 것은 디스크의 공개 키 사본에 대한 요청을 지정하고 해당 인증서를 신뢰하도록 지시하는 것입니다.
답변
시험:
r = requests.post(url, data=data, verify='/path/to/public_key.pem')
답변
으로 verify
매개 변수를 사용자 정의 인증 기관 번들을 제공 할 수 있습니다
requests.get(url, verify=path_to_bundle_file)
에서 워드 프로세서 :
verify
신뢰할 수있는 CA의 인증서를 사용하여 CA_BUNDLE 파일의 경로를 전달할 수 있습니다 . 이 신뢰할 수있는 CA 목록은 REQUESTS_CA_BUNDLE 환경 변수를 통해 지정할 수도 있습니다.
답변
가장 쉬운 방법은 REQUESTS_CA_BUNDLE
사설 인증 기관 또는 특정 인증서 번들을 가리키는 변수를 내보내는 것 입니다. 명령 줄에서 다음과 같이 할 수 있습니다.
export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem
python script.py
당신은 당신의 인증 기관을 가지고 있고 당신은 입력하지 않으려면 export
당신이 추가 할 수 있습니다마다 REQUESTS_CA_BUNDLE
에 당신의~/.bash_profile
로 다음을 :
echo "export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem" >> ~/.bash_profile ; source ~/.bash_profile
답변
여러 인증서가 필요한 경우 다음과 같이 해결되었습니다. 여러 루트 pem 파일 인 myCert-A-Root.pem 및 myCert-B-Root.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
답변
설정 export SSL_CERT_FILE=/path/file.crt
이 작업을 수행해야합니다.
답변
httplib2에 대한 CA (내 경우에는 Charles Proxy)를 추가하려고하는 사람이 여기에 착륙하는 경우 (내 경우에는 Charles Proxy) cacerts.txt
Python 패키지에 포함 된 파일에 추가 할 수있는 것처럼 보입니다 .
예를 들면 :
cat ~/Desktop/charles-ssl-proxying-certificate.pem >> /usr/local/google-cloud-sdk/lib/third_party/httplib2/cacerts.txt
다른 솔루션에서 참조되는 환경 변수는 요청에 따라 다르며 테스트에서 httplib2에 의해 선택되지 않았습니다.
답변
시도해 볼 수 있습니다.
settings = s.merge_environment_settings(prepped.url, None, None, None, None)
자세한 내용은 http://docs.python-requests.org/en/master/user/advanced/에서 읽을 수 있습니다.