Я использую Azure CLI в bash в PowerShell в Windows 10. Я сижу за корпоративным прокси. Моя цель — автоматизировать развертывание и настройку ресурсов Azure.
Некоторые команды Azure CLI работают отлично: я могу запустить az login, изменить подписку по умолчанию, составить список местоположений, групп ресурсов, ресурсов внутри групп ресурсов и даже запустить сценарии оболочки для развертывания таких ресурсов, как Key Vaults.
Однако, когда я пытаюсь перечислить ключи или секреты в Key Vault или создать ключи/секреты, я получаю следующее:
Произошла ошибка в запросе., SSLError: HTTPSConnectionPool(host='xxxxxx.vault.azure.net', port=443): превышено максимальное количество попыток с URL-адресом: /secrets?api-version=7.0 (вызвано SSLError(SSLError("bad рукопожатие: ошибка ([('Подпрограммы SSL', 'tls_process_server_certificate', 'сбой проверки сертификата')],)",),))
Пример, который я привожу здесь, относится к Key Vault, но я получаю ту же ошибку с другими типами ресурсов, поэтому я не думаю, что Key Vault является проблемой.
При добавлении параметра --debug к команде я вижу, что ошибка исходит от одной из библиотек Python:
urllib3.connectionpool : Повторная попытка (Повторная попытка (всего = 0, подключение = 4, чтение = 4, перенаправление = Нет, статус = Нет)) после разрыва соединения из-за «SSLError (SSLError («плохое рукопожатие: ошибка» ([('Процедуры SSL') , 'tls_process_server_certificate', 'сбой проверки сертификата')],)",),)': /secrets?api-version=7.0
Я попробовал предложения, представленные на:
Работа с Azure CLI за прокси-сервером, перехватывающим SSL,
В том числе 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
который предлагается в следующем посте:
Но, к сожалению, ничего из вышеперечисленного не привело к изменению результата.
Я использую Azure CLI версии 2.0.60 и Python 3.


Поскольку вы использовали Windows, а не Linux или MacOS, попробуйте использовать set вместо export, чтобы установить переменные среды в PowerShell, как показано ниже, а затем снова запустить команду azure cli для Key Vault.
set ADAL_PYTHON_SSL_NO_VERIFY=1
set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
А для команды export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt в Linux, я думаю, вы можете обратиться к потоку SuperUser https://superuser.com/questions/217719/what-are-the-windows-system-certificate-stores, чтобы запустить окно PowerShell от имени администратора (щелкните правой кнопкой мыши ярлык PowerShell и выберите Run as administrator для запуска).
Однако, как вы сказали о in bash with PowerShell, похоже, что вы открываете сеанс оболочки bash подсистемы Windows для Linux или как приглашение Git Bash из PS:, в котором нечетко описано, что я не могу понять для ваших операций, пожалуйста, опубликуйте более подробную информацию об этом, и Я не думаю, что это хорошая практика - использовать PowerShell с вложенным bash.
Связавшись с командой azure cli, выяснилось, что существует ошибка, которая влияет на команды хранилища ключей, которые выполняются за прокси-сервером.
Обратитесь к следующей проблеме github, которую я создал, с подробным объяснением проблемы (и возможным обходным путем):
AZURE_CLI_DISABLE_CONNECTION_VERIFICATION не влияет на проверку SSL.
Вышеупомянутая проблема также связана со следующим, которое, по-видимому, является дубликатом:
Также стоит упомянуть, что эта проблема возникает независимо от платформы, на которой работает azure cli, поэтому это не проблема среды или проблема при настройке переменных среды.
Я обновил это своим комментарием от 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-win32cacert.pem, экспортированный из загруженного сертификата. Мне особенно понадобился Microsoft IT TLS ЦС 5 и «Baltimore CyberTrust Root» из этого сертификата. Просто откройте сертификаты в текстовом редакторе и добавьте содержимое в конец C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pemC:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pemsetx /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
Не забудьте добавить свой rootCA.pem в конец файла cacert.pem. См.: github.com/Azure/azure-cli/issues/5099#issuecomment-392605796 «Добавить сертификаты из цепочки доверия в конец файлов cacert.pem (нет необходимости добавлять листовой сертификат. Нужны только корневой и промежуточный сертификаты)»
Выполнение только двух приведенных ниже команд устранило проблему для меня.
"C:\Program Files (x86)\Microsoft SDK\Azure\CLI2\python" -m pip install --upgrade pip "C:\Program Files (x86)\Microsoft SDK\Azure\CLI2\Scripts\pip" установить python-certifi-win32
В моем случае проблема возникла из-за вызова команды Azure CLI за прокси-сервером компании.
Ниже у меня работало в корпоративном брандмауэре и прокси.
HTTP_PROXY и HTTPS_PROXYcertifi путь для установки AZ CLI. Это было "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"Сделанный !
Работает на WSL Ubuntu 20.04
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
Чтобы делать запросы Python, используйте системный пакет ca-certificates.
Решение от Работа с Azure CLI за прокси-сервером, перехватывающим SSL
Метод Питера Пэна set не работает в PowerShell, используйте вместо этого:
$env:ADAL_PYTHON_SSL_NO_VERIFY = '1'
$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION = '1'
Это работает в Powershell 7
что-то не так в вашем окружении. вы можете использовать образ docker azure cli и убедиться, что он работает нормально.