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----
자체 서명 인증서 받기
다음은 자체 서명 된 인증서를 얻는 방법에 대한 몇 가지 옵션입니다.
- OpenSSL CLI를 통해
- 브라우저를 통해
- Python 스크립팅을 통해
OpenSSL CLI로 자체 서명 된 인증서 받기
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
- Pip SSL: https://pip.pypa.io/en/stable/user_guide/#configuration
- Conda SSL: https://stackoverflow.com/a/35804869/622276
- Acquiring your CA: https://stackoverflow.com/a/50486128/622276
- Using Python to automatically grab your Peer CA: How to get response SSL certificate from requests in python?
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
'programing' 카테고리의 다른 글
AutoCloseable을 사용하여 여러 리소스 닫기 (리소스로 시도) (0) | 2021.01.14 |
---|---|
Localhost 용 Googlemaps API 키 (0) | 2021.01.14 |
Java Iterable을 Scala Iterable로 어떻게 변환 할 수 있습니까? (0) | 2021.01.14 |
ICommand MVVM 구현 (0) | 2021.01.14 |
스택 가비지가 Java에서 수집됩니까? (0) | 2021.01.14 |