복붙노트

[PYTHON] Windows에서 파이썬이 사용하는 CA 저장소에 사용자 지정 CA 루트 인증서를 추가하는 방법은 무엇입니까?

PYTHON

Windows에서 파이썬이 사용하는 CA 저장소에 사용자 지정 CA 루트 인증서를 추가하는 방법은 무엇입니까?

방금 python.org에서 Python3을 설치했으며 pip로 패키지를 설치하는 데 문제가 있습니다. 설계 상으로는 여기에 네트워크상의 man-in-the-middle 패킷 검사 어플라이언스가 있으며 여기에는 모든 패킷 (SSL 포함)을 검사하여 모든 SSL 연결을 자체 인증서로 종료합니다. GPO의 일부가 사용자 지정 루트 인증서를 Windows Keystore로 푸시합니다.

Java를 사용할 때 외부 https 사이트에 액세스해야하는 경우 자체 서명 된 CA 인증서를 신뢰하도록 JVM에서 cacerts를 수동으로 업데이트해야합니다.

어떻게 파이썬을 위해 그것을 수행합니까? 지금 당장 핍을 사용하여 패키지를 설치하려고하면 멋진 [SSL : CERTIFICATE_VERIFY_FAILED] 오류가 발생합니다.

--trusted-host 매개 변수를 사용하여 무시할 수 있다는 것을 알았지 만 설치하려고하는 모든 패키지에 대해이를 수행하고 싶지 않습니다.

파이썬이 사용하는 CA 인증서 저장소를 업데이트하는 방법이 있습니까?

해결법

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

    1.실행 : python -c "import ssl; print (ssl.get_default_verify_paths ())"를 사용하여 인증서를 확인하는 데 사용되는 현재 경로를 확인하십시오. 그 중 하나에 회사의 루트 인증서를 추가하십시오.

    실행 : python -c "import ssl; print (ssl.get_default_verify_paths ())"를 사용하여 인증서를 확인하는 데 사용되는 현재 경로를 확인하십시오. 그 중 하나에 회사의 루트 인증서를 추가하십시오.

    openssl_capath_env 경로는 환경 변수 SSL_CERT_DIR을 가리 킵니다.

    SSL_CERT_DIR이 존재하지 않으면 파일을 생성하고 파일 시스템 내의 유효한 폴더를 가리켜 야합니다. 그런 다음이 폴더에 인증서를 추가하여 사용할 수 있습니다.

  2. ==============================

    2.가장 좋은 대답은 아니지만 pip의 --cert 옵션을 사용하여 이미 생성 된 ca 번들을 재사용 할 수 있습니다. 예를 들면 다음과 같습니다.

    가장 좋은 대답은 아니지만 pip의 --cert 옵션을 사용하여 이미 생성 된 ca 번들을 재사용 할 수 있습니다. 예를 들면 다음과 같습니다.

    pip install SQLAlchemy==1.1.15 --cert="C:\Users\myUser\certificates\my_ca-bundle.crt"
    
  3. ==============================

    3.Windows에서 % APPDATA % \ pip \에 pip.ini 파일을 만들어서 해결했습니다.

    Windows에서 % APPDATA % \ pip \에 pip.ini 파일을 만들어서 해결했습니다.

    예 C : \ Ussers \ Assist \ Problem \ Roaming \ Pipe \ Pipe

    pip.ini에서 인증서에 경로를 지정합니다.

    [global]
    cert=C:\Users\asmith\SSL\teco-ca.crt
    

    https://pip.pypa.io/en/stable/user_guide/#configuration에는 구성 파일에 대한 자세한 정보가 있습니다.

  4. ==============================

    4.Git과 비슷한 문제를 광범위하게 문서화 한 후 (어떻게하면 git가 자체 서명 된 인증서를 수락 할 수 있을까?) 여기에서 우리는 우리가 신뢰해야하는 MitM "공격"을 제공하는 프록시를 가진 회사 방화벽 뒤에있다.

    Git과 비슷한 문제를 광범위하게 문서화 한 후 (어떻게하면 git가 자체 서명 된 인증서를 수락 할 수 있을까?) 여기에서 우리는 우리가 신뢰해야하는 MitM "공격"을 제공하는 프록시를 가진 회사 방화벽 뒤에있다.

    모든 SSL 확인을 사용 중지하지 마세요.

    pip config set global.cert=path/to/ca-bundle.crt
    conda config --set ssl_verify path/to/ca-bundle.crt
    
    # Bonus while we are here...
    git config --global http.sslVerify true
    git config --global http.sslCAInfo path/to/ca-bundle.crt
    

    하지만 ca-bundle.crt는 어디서 구할 수 있습니까?

    cURL은 Mozilla Firefox와 함께 제공되는 인증 기관의 발췌를 게시합니다.

    https://curl.haxx.se/docs/caextract.html

    텍스트 파일 편집기에서이 cacert.pem 파일을 열어서이 파일에 자체 서명 된 CA를 추가해야합니다.

    인증서는 X.509를 준수하는 문서이지만 몇 가지 방법으로 디스크에 인코딩 할 수 있습니다. 아래 기사는 좋은 읽을 거리지만 짧은 버전은 파일 확장자에서 PEM이라고도하는 base64 인코딩을 처리한다는 것입니다. 형식이 다음과 같이 표시됩니다.

    ----BEGIN CERTIFICATE----
    ....
    base64 encoded binary data
    ....
    ----END CERTIFICATE----
    

    https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them

    이 답변과 링크 된 블로그 덕분에 Windows에서 인증서를 확인한 다음 base64 PEM 인코딩 옵션을 사용하여 파일에 복사하는 방법을 단계별로 보여줍니다.

    이 내 보낸 파일의 내용을 복사하여 cacerts.pem 파일 끝에 붙여 넣으십시오.

    일관성을 위해이 파일의 이름을 cacerts.pem -> ca-bundle.crt로 바꿔 다음과 같이 쉽게 배치하십시오.

    # Windows
    %USERPROFILE%\certs\ca-bundle.crt
    
    # or *nix
    $HOME/certs/cabundle.crt
    

    모든 훌륭한 답변 덕분에 :

    어떻게 파이썬 요청에서 응답 SSL 인증서를 얻으려면?

    나는 한 걸음 더 나아가려고 노력하기 위해 다음과 같이 정리했다.

    https://github.com/neozenith/get-ca-py

    이 CA 저장소가 자체 서명 된 추가 CA에 상주하는 위치를 알 수 있도록 pip 및 conda에 구성을 설정하십시오.

    pip config set global.cert=%USERPROFILE%\\certs\\ca-bundle.crt
    conda config --set ssl_verify %USERPROFILE%\\certs\\ca-bundle.crt
    

    또는

    pip config set global.cert=$HOME/certs/ca-bundle.crt
    conda config --set ssl_verify $HOME/certs/ca-bundle.crt
    
  5. from https://stackoverflow.com/questions/39356413/how-to-add-a-custom-ca-root-certificate-to-the-ca-store-used-by-python-in-window by cc-by-sa and MIT license