자유게시판

파이썬 SSL 인증서를 신뢰하도록 요청하는 방법

코리아 0 8,762 2020.07.16 13:30
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.누군가가 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.내보내기 설정 SSL_CERT_FILE = / path / file.crt가 작업을 수행해야합니다.

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

==============================

7.시도 할 수 있습니다 :

시도 할 수 있습니다 :

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'



Comments

Category
State
  • 현재 접속자 71 명
  • 오늘 방문자 800 명
  • 어제 방문자 2,480 명
  • 최대 방문자 7,216 명
  • 전체 방문자 1,649,537 명
  • 전체 게시물 33,530 개
  • 전체 댓글수 19 개
  • 전체 회원수 517 명
Facebook Twitter GooglePlus KakaoStory NaverBand