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)
그러나, 내가하고자하는 것은 디스크상의 공개 키의 복사본에 대한 포인트 요청이며 그 인증서를 신뢰하도록 지시하는 것입니다.
시험:
r = requests.post(url, data=data, verify='/path/to/public_key.pem')
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]>
가장 쉬운 방법은 개인 인증 기관이나 특정 인증서 번들을 가리키는 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
여러 인증서가 필요한 경우는 다음과 같이 해결됩니다. 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
누군가가 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에 의해 선택되지 않았습니다.
내보내기 설정 SSL_CERT_FILE = / path / file.crt가 작업을 수행해야합니다.
시도 할 수 있습니다 :
settings = s.merge_environment_settings(prepped.url, None, None, None, None)
자세한 내용은 다음을 참조하십시오. http://docs.python-requests.org/ko/master/user/advanced/
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
파이썬의 라이브러리 설치는 pip로 간단하게 할 수 있습니다.
그런데 외부 네트워크 접속이 자유롭지 못한 네트워크 (회사 네트워크 등)에서는 SSL 인증서 문제 등으로
pip를 통한 라이브러리 다운 및 설치가 되지 않을 수 있습니다.
이런 상황에서 해결 방법입니다.
pip의 옵션 중 --trusted-host 옵션을 사용해주면 됩니다.
pip에서 라이브러리를 다운받는 서버인
pypi.org 와
files.pythonhosted.org 를 해당 옵션으로 지정 후 install을 해주시면 됩니다.
ex) pip --trusted-host pypi.org --trusted-host files.pythonhosted.org install 라이브러리명
저 같은 경우 alias로 등록을 해두었습니다
alias pip='pip --trusted-host pypi.org --trusted-host files.pythonhosted.org'