由於 Zscaler 會抽換中繼憑證,造成在安裝 Azure DevOps CLI 擴充功能的時候,會因為無法合法的辨識 Zscaler 中繼憑證,而無法安裝成功,這篇提供一個方法來解決這個問題。

安裝 Azure CLI

首先若電腦還沒有安裝 Azure CLI,可以參考官方這篇文章來進行安裝,但如果手邊的電腦只能手動安裝,這時請使用下列連結下載 .msi 安裝檔進行安裝:https://aka.ms/installazurecliwindows

安裝 Azure DevOps CLI 擴充功能

因為在安裝了 Zscaler 的電腦,會因為保護資安的原因抽換中繼憑證,造成無法直接使用 az extension add --name azure-devops 這樣的方式進行安裝 Azure CLI 的擴充套件,必須明確指定檔案來源,因此要先到 Azure DevOps CLI 的 GitHub,從 Release 中找到最新版的 Python Whell File (.whl 檔)來安裝,範例指令如下:

az extension add --source https://github.com/Azure/azure-devops-cli-extension/releases/download/20211108.1/azure_devops-0.22.0-py2.py3-none-any.whl

你可以在上述指令加上 --debug 來顯示更多資訊。

但是到這裡,你會發現上述指令即使指定了安裝檔的來源位置,依然無法正確,因為 Zscaler 抽換了中繼憑證所致,所以我們必須讓這個安裝擴充功能的背後機制,認識這個中繼憑證。

加入 Zscaler 中繼憑證

首先請先檢查 Azure CLI 所內建的 Python 是否有安裝 certifi 這個套件,你可以使用下列指令來確認或進行安裝:

這裡請注意!最好要切換到 Azure CLI 的 Python.exe 目錄下進行操作,避免和系統另外安裝的 Python 混淆。

# 切換到 Azure CLI 的 Python.exe 目錄,位置可能因版本而不同
cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\"
# 檢查是否有安裝 certifi 套件及原始的憑證檔
./python.exe -m certifi
# 若沒有請使用以下指令來安裝,--trusted-host 為忽略 SSL 相關檢查
./pip.exe install --upgrade certifi --trusted-host pypi.org --trusted-host files.pythonhosted.org

接著請下載 ZscalerRootCertificate-2048-SHA256.crt 這張 Zscaler 根憑證檔,並使用下列指令將其加入至 Azure CLI 內建的 Python certifi 中:

gc .\ZscalerRootCertificate-2048-SHA256.crt | ac "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\pip\_vendor\certifi\cacert.pem"

再安裝一次 Azure DevOps CLI 擴充功能

到這裡就大功告成了,再使用上述安裝 Azure DevOps CLI 擴充功能的指令進行安裝就可以囉!

最後可以使用 az login 來登入你的 Azure 帳號來操作相關資源,或用 az devops -h 來確認 Azure DevOps CLI 是否能正確執行。


參考資料:


Poy Chang

Trial and Error