我在Windows 10的PowerShell中的bash中使用Azure CLI。我坐在公司代理后面。我的目标是自动化Azure资源的部署和设置。
某些Azure CLI命令运行得很好:我可以运行az登录,更改默认订阅,列出位置,资源组,资源组中的资源,甚至可以运行shell脚本来部署诸如密钥保管库之类的资源。
但是,当我尝试列出Key Vault中的密钥或机密或创建密钥/机密时,我得到以下信息:
请求中发生错误。SSLError:HTTPSConnectionPool(host ='xxxxxx.vault.azure.net',port = 443):URL超过了最大重试次数:/ secrets?api-version = 7.0(由SSLError(SSLError(“握手不好:Error([('SSL例程','tls_process_server_certificate','证书验证失败')],),)))
我在此处提供的示例是针对密钥保险库的,但是其他类型的资源也遇到了相同的错误,因此我认为密钥保险库不是问题。
在命令中附加--debug
参数时,我可以看到错误是来自以下Python库之一:
urllib3.connectionpool:连接被'SSLError(SSLError(“错误握手:错误握手:Error()中断)后,重试(Retry(total = 0,connect = 4,read = 4,redirect = None,status = None)) [('SSL例程','tls_process_server_certificate','证书验证失败')],),),)':/secrets?api-version=7.0
我尝试了以下提供的建议:
Working with Azure CLI behind SSL intercepting proxy server,
包括export AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=anycontent
以禁用证书检查(不推荐)和export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
以使Python请求使用系统ca-certificates捆绑包。
我也尝试过:
export ADAL_PYTHON_SSL_NO_VERIFY=1
在以下文章中建议:
[AzureStack] Handle SSL verification for certs not in Python root CA list #2267
但是不幸的是,以上结果均未产生任何变化。
我正在使用Azure CLI版本2.0.60和Python 3。
答案 0 :(得分:4)
我已经用来自https://github.com/Azure/azure-cli/issues/5099
的评论对此进行了更新@rzand的过程是唯一对我有用的过程,尽管需要额外的步骤,但我将扩展他的解决方案。全部来自高架炮弹
"C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python" -m pip install --upgrade pip
"C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts\pip" install python-certifi-win32
cacert.pem
中。我特别需要该证书中的Microsoft IT TLS CA 5和“巴尔的摩CyberTrust根目录”。只需在文本编辑器中打开证书并将内容附加到C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem
C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem
setx /m REQUESTS_CA_BUNDLE "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem"
中设置系统/环境变量$env:REQUESTS_CA_BUNDLE="C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem"
中设置系统/环境变量最后没有错误。我什至可以检索Key Vault的机密
答案 1 :(得分:1)
由于您使用的是Windows,而不是Linux或MacOS,请尝试使用set
而非export
在PowerShell中设置环境变量,如下所示,然后对Key运行azure cli命令再次打开保险柜。
set ADAL_PYTHON_SSL_NO_VERIFY=1
set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
对于Linux上的命令export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
,我认为您可以参考超级用户线程https://superuser.com/questions/217719/what-are-the-windows-system-certificate-stores以管理员身份运行Powershell窗口(右键单击PowerShell快捷方式,然后选择Run as administrator
运行)。
但是,正如您所说的in bash with PowerShell
一样,这听起来像是您打开了Windows Subsystem for Linux的bash shell会话,或者像是PS:
提示符下的Git Bash,它模糊地描述了我无法理解的您的操作,请发布有关它的更多详细信息,我认为使用带有bash嵌套的PowerShell并不是一个好习惯。
答案 2 :(得分:1)
仅运行以下两个命令,即可为我解决此问题
“ C:\ Program Files(x86)\ Microsoft SDKs \ Azure \ CLI2 \ python” -m pip install --upgrade pip “ C:\ Program Files(x86)\ Microsoft SDKs \ Azure \ CLI2 \ Scripts \ pip”安装python-certifi-win32
就我而言,该问题是由于在公司代理后面调用Azure CLI命令引起的。
答案 3 :(得分:1)
Peter Pan 的 set
方法在 PowerShell 中效果不佳,请改用此方法:
$env:ADAL_PYTHON_SSL_NO_VERIFY = '1'
$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION = '1'
答案 4 :(得分:0)
联系了Azure CLI团队之后,看来有一个错误会影响在代理后面运行的keyvault命令。
请参阅我创建的以下github问题,其中对该问题有深入的解释(以及可能的解决方法):
AZURE_CLI_DISABLE_CONNECTION_VERIFICATION does not have any effect for SSL verification
上述问题也与以下内容相关,这些内容似乎是重复的:
Az keyvault secret list --vault_name thru proxy is getting Proxy Authentication Required
值得一提的是,无论运行Azure cli的平台如何,都会发生此问题,因此这不是环境问题,也不是设置环境变量时的问题。
答案 5 :(得分:0)
下面在公司防火墙和代理中为我工作。
HTTP_PROXY
和 HTTPS_PROXY
环境变量certifi
路径。对我来说是"C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi"
。"C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem"
完成!
答案 6 :(得分:0)
适用于 WSL Ubuntu 20.04
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
为了使 Python 请求使用系统 ca-certificates bundle
来自Working with Azure CLI behind SSL intercepting proxy server的解决方案