登录 Azure 容器注册表时 SSL 证书验证失败

Posted

技术标签:

【中文标题】登录 Azure 容器注册表时 SSL 证书验证失败【英文标题】:SSL Certificate Verification fails when logging into Azure Container Registry 【发布时间】:2018-07-06 06:43:59 【问题描述】:

我是 Azure 的新手,正在尝试从我的计算机 (mac OS) 上运行命令行。我通过自制软件安装了 azure-cli,当我执行 az login 时,出现以下错误:

Error occurred in request., SSLError: HTTPSConnectionPool(host='management.azure.com', port=443): Max retries exceeded with url: /tenants?api-version=2016-06-01 (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))
Traceback (most recent call last):
  File "/usr/local/Cellar/azure-cli/2.0.25/libexec/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 441, in wrap_socket
    cnx.do_handshake()
  File "/usr/local/Cellar/azure-cli/2.0.25/libexec/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1806, in do_handshake
    self._raise_ssl_error(self._ssl, result)
  File "/usr/local/Cellar/azure-cli/2.0.25/libexec/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1546, in _raise_ssl_error
    _raise_current_error()
  File "/usr/local/Cellar/azure-cli/2.0.25/libexec/lib/python3.6/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
    raise exception_type(errors)
OpenSSL.SSL.Error: [('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')]

我尝试了以下方法:

export ADAL_PYTHON_SSL_NO_VERIFY=1
export AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1

据此:https://github.com/Azure/azure-cli/issues/2267

这让我可以登录,但是当我执行 az acr login --name <registry name> 时,我再次收到类似的错误:

HTTPSConnectionPool(host='registryName.azurecr.io', port=443): Max retries exceeded with url: /v2/ (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))
Traceback (most recent call last):
  File "/usr/local/Cellar/azure-cli/2.0.25/libexec/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 441, in wrap_socket
    cnx.do_handshake()
  File "/usr/local/Cellar/azure-cli/2.0.25/libexec/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1806, in do_handshake
    self._raise_ssl_error(self._ssl, result)
  File "/usr/local/Cellar/azure-cli/2.0.25/libexec/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1546, in _raise_ssl_error
    _raise_current_error()
  File "/usr/local/Cellar/azure-cli/2.0.25/libexec/lib/python3.6/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
    raise exception_type(errors)
OpenSSL.SSL.Error: [('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')]

有什么办法可以解决这个问题吗?提前致谢。

【问题讨论】:

这个运气好吗?从 azure 请求对象时遇到类似问题 有同样的问题。我认为当您使用代理时会发生这种情况 【参考方案1】:

我认为问题在于 Python 库没有正确执行握手。从错误来看,OpenSSL 似乎不想信任 Python 脚本发出的请求。

https://pyopenssl.org/en/stable/api.html 该站点提供有关 OpenSSL 库的信息。 Python 脚本似乎没有正确实现 SSL 函数。

【讨论】:

【参考方案2】:

尝试按照此处文档中的说明设置 REQUESTS_CA_BUNDLE: https://github.com/Azure/azure-cli/blob/dev/doc/use_cli_effectively.md#working-behind-a-proxy

【讨论】:

尽量避免发布链接

以上是关于登录 Azure 容器注册表时 SSL 证书验证失败的主要内容,如果未能解决你的问题,请参考以下文章

Easy_install 或 pip 安装错误:[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:579)]

如何选择SSL证书

VMware vSphere CLient 5.0 登录时提示“出现未知错误。(由于客户端验证服务器的SSL证书,请求失败。)

在 Terraform 中将 SSL 证书附加到 Azure 应用程序网关

为啥我的SSL证书验证失败

Azure 的 SSL 证书