programing

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

procenter 2021. 1. 14. 23:21
반응형

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


방금 python.org에서 Python3을 설치했으며 pip. 기본적으로 네트워크에는 자체 인증서로 모든 SSL 연결을 사임하여 모든 패킷 (ssl 포함)을 검사하는 중간자 패킷 검사 어플라이언스가 있습니다. GPO의 일부는 사용자 지정 루트 인증서를 Windows 키 저장소로 푸시합니다.

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

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

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

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


자체 서명 인증 기관 pip/conda

Git의 유사한 문제를 광범위하게 문서화 한 후 ( 어떻게 git이 자체 서명 된 인증서를 수락하도록 할 수 있습니까? ), 여기서 우리는 우리가 신뢰해야하는 MitM "공격"제공하는 프록시가있는 기업 방화벽 뒤에 있습니다 .

모든 SSL 확인을 비활성화하지 마십시오!

이것은 나쁜 보안 문화를 만듭니다. 그 사람이되지 마십시오.

tl; dr

pip config set global.cert path/to/ca-bundle.crt
pip config list
conda config --set ssl_verify path/to/ca-bundle.crt
conda config --show ssl_verify

# Bonus while we are here...
git config --global http.sslVerify true
git config --global http.sslCAInfo path/to/ca-bundle.crt

그러나 우리는 어디에서 얻 ca-bundle.crt습니까?


최신 CA 번들 받기

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


자체 서명 인증서 받기

다음은 자체 서명 된 인증서를 얻는 방법에 대한 몇 가지 옵션입니다.

  • OpenSSL CLI를 통해
  • 브라우저를 통해
  • Python 스크립팅을 통해

OpenSSL CLI로 자체 서명 된 인증서 받기

https://unix.stackexchange.com/questions/451207/how-to-trust-self-signed-certificate-in-curl-command-line/468360#468360

echo quit | openssl s_client -showcerts -servername "curl.haxx.se" -connect curl.haxx.se:443 > cacert.pem

브라우저를 통해 자체 서명 된 인증 기관 받기

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

이 내 보낸 파일의 내용을 복사하여 파일 끝에 붙여 넣습니다 cacerts.pem.

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

# Windows
%USERPROFILE%\certs\ca-bundle.crt

# or *nix
$HOME/certs/cabundle.crt

Python을 통해 자체 서명 된 인증 기관 받기

모든 훌륭한 답변에 감사드립니다.

How to get response SSL certificate from requests in python?

I have put together the following to attempt to take it a step further.

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


Finally

Set the configuration in pip and conda so that it knows where this CA store resides with our extra self-signed CA.

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

OR

pip config set global.cert $HOME/certs/ca-bundle.crt
conda config --set ssl_verify $HOME/certs/ca-bundle.crt

THEN

pip config list
conda config --show ssl_verify

References


Run: python -c "import ssl; print(ssl.get_default_verify_paths())" to check the current paths which are used to verify the certificate. Add your company's root certificate to one of those.

The path openssl_capath_env points to the environment variable: SSL_CERT_DIR.

If SSL_CERT_DIR doesn't exist, you will need to create it and point it to a valid folder within your filesystem. You can then add your certificate to this folder to use it.


Not best answer but you can reuse an already created ca bundle using --cert option of pip, for instance:

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

On Windows, I solved it by creating a pip.ini file in %APPDATA%\pip\

e.g. C:\Users\asmith\AppData\Roaming\pip\pip.ini

In the pip.ini I put the path to my certificate:

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

https://pip.pypa.io/en/stable/user_guide/#configuration has more information about the configuration file.


Open Anaconda Navigator.

Go to File\Preferences.

Enable SSL verification Disable (not recommended)

or Enable and indicate SSL certificate path(Optional)

Update a package to a specific version:

Select Install on Top-Right

Select package click on tick

Mark for update

Mark for specific version installation

Click Apply

ReferenceURL : https://stackoverflow.com/questions/39356413/how-to-add-a-custom-ca-root-certificate-to-the-ca-store-used-by-pip-in-windows

반응형