我在Windows 10的PowerShell中使用bash中的Azure CLI,我坐在公司代理后面。我的目标是自动化部署和设置Azure资源。
其中一些Azure CLI命令可以正常工作:我可以运行az login,更改默认订阅,列出位置、资源组、资源组内的资源,甚至可以运行shell脚本来部署资源(如Key Vaults)。
但是,当我尝试列出Key Vault中的密钥或密码或创建密钥/密码时,会收到以下错误:
请求中发生错误., SSLError: HTTPSConnectionPool(host='xxxxxx.vault.azure.net', port=443): Max retries exceeded with url: /secrets?api-version=7.0 (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))
我提供的示例是针对Key Vault的,但我在其他类型的资源上也遇到了同样的错误,因此我不认为Key Vault是问题所在。
当在命令中添加--debug
参数时,可以看到错误来自Python库之一:
urllib3.connectionpool : Retrying (Retry(total=0, connect=4, read=4, redirect=None, status=None)) after connection broken by 'SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),)': /secrets?api-version=7.0
我尝试了以下提供的建议来解决在SSL拦截代理服务器后使用Azure CLI的问题: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证书捆绑包。此外,我还尝试了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。