Python 的開發者應該都知道 Python 安裝套件時,是使用 pip install package 的指令,但是在企業內部環境中,網路可能會因為一些設定而無法直接使用此指令安裝套件,例如因為無法合法的辨識 Zscaler 中繼憑證,而導致無法成功安裝 Python 套件,這篇提供一個方法來解決這個問題。
專案中通常會用到不只一個套件,因此為了管理方便,我們會將要安裝的套件名稱及版本寫在 requirements.txt 中,這樣在安裝套件時,就可以直接使用 pip install -r requirements.txt 來安裝所有套件。
但在中繼憑證被 Zscaler 抽換之後,你在使用 pip 來安裝套件時,會遇到如下的錯誤訊息,所以我們必須讓 pip 這個套件管理器認識 Zscaler 的根憑證。

1 | WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate Verify faited: setf signed certificate in certificate chain ( _ssl.c:997)'))' |
加入 Zscaler 憑證
在 Zscaler 的官方文件中(這份)有提供多種方法讓你處理這個問題,我們這邊選擇使用調整 pip 的 certifi 來解決這個問題。
首先,要先知道 pip 這個套件管理器的位置,每個人所安裝的位置可能不一樣,不過可以使用 pip --version 來查看 pip 的版本和位置。
例如,在我的電腦執行 pip --version 這個指令,就會顯示下面的訊息:
1 | pip 23.0.1 from C:\Users\poychang\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip (python 3.11) |
其中 C:\Users\poychang\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip 這個路徑是關鍵,我們要將 Zscaler 的根憑證加入到這個路徑中位於 _vendor 資料夾下的 certifi 套件中的 cacert.pem。
接著,請下載 ZscalerRootCertificate-2048-SHA256.crt 這張 Zscaler 根憑證檔之後,並使用下列指令將其加入至 Python 和 pip 的 certifi 中:
1 | # 檢查是否有安裝 certifi 套件及原始的憑證檔 |
接著分別對 Python 和 pip 的 cacert.pem 做調整:
1 | # 調整 Python 的 certifi 套件的 cacert.pem |
如此一來就可以正常使用 pip 來安裝套件了。
參考資料: