Ошибка рукопожатия SSL с некоторыми командами Azure CLI

Я использую 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

который предлагается в следующем посте:

[AzureStack] Обработка проверки SSL для сертификатов, отсутствующих в списке корневых ЦС Python # 2267

Но, к сожалению, ничего из вышеперечисленного не привело к изменению результата.

Я использую Azure CLI версии 2.0.60 и Python 3.

что-то не так в вашем окружении. вы можете использовать образ docker azure cli и убедиться, что он работает нормально.

4c74356b41 02.04.2019 07:41
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
15
1
26 322
7

Ответы 7

Поскольку вы использовали 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.

Вышеупомянутая проблема также связана со следующим, которое, по-видимому, является дубликатом:

Секретный список Az keyvault --vault_name через прокси-сервер требует проверки подлинности прокси-сервера

Также стоит упомянуть, что эта проблема возникает независимо от платформы, на которой работает azure cli, поэтому это не проблема среды или проблема при настройке переменных среды.

Я обновил это своим комментарием от https://github.com/Azure/azure-cli/issues/5099

Процесс @rzand был единственным, который сработал для меня, но я расскажу о его решении, поскольку потребовались дополнительные шаги. Все из надземных Раковин

  1. "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python" -m pip install --upgrade pip
  2. "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts\pip" install python-certifi-win32
  3. Добавьте корневой ЦС облачных сервисов в cacert.pem, экспортированный из загруженного сертификата. Мне особенно понадобился Microsoft IT TLS ЦС 5 и «Baltimore CyberTrust Root» из этого сертификата. Просто откройте сертификаты в текстовом редакторе и добавьте содержимое в конец C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem
  4. Добавьте самозаверяющий сертификат, предоставленный вам сетевой командой. Просто откройте сертификат в текстовом редакторе и добавьте содержимое в конец C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem
  5. Установите переменную системы/среды в командной строке setx /m REQUESTS_CA_BUNDLE "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem"
  6. Установите переменную системы/среды в Powershell $env:REQUESTS_CA_BUNDLE = "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem"
  7. Закройте и откройте Bash / командную строку

НАКОНЕЦ без ошибок. Я даже могу получить секреты Key Vault

Не забудьте добавить свой rootCA.pem в конец файла cacert.pem. См.: github.com/Azure/azure-cli/issues/5099#issuecomment-39260579‌​6 «Добавить сертификаты из цепочки доверия в конец файлов cacert.pem (нет необходимости добавлять листовой сертификат. Нужны только корневой и промежуточный сертификаты)»

Ayushmati 25.05.2021 15:21

Выполнение только двух приведенных ниже команд устранило проблему для меня.

"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_PROXY
  • Найдите certifi путь для установки 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

Marissa 26.01.2022 05:44

Другие вопросы по теме