ssl 在Windows上使用Azure CLI发布证书链中的自签名证书

doinxwow  于 2022-12-29  发布在  Windows
关注(0)|答案(3)|浏览(363)

我有一些麻烦配置我的windows工作与az命令行工具。我已经测试了多个配置。一个在本地安装的系统和一个与基于windows的docker容器。我得到了相同的错误在两个系统上。
如果我发出以下命令:

az login --tenant my-domain.org

出现以下错误:
HTTPSConnectionPool(host='login.microsoftonline.com', port=443): Max retries exceeded with url: /my-domain.org/.well-known/openid-configuration (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1125)')))
容器具有以下azopenssl版本:

PS C:\azp> az version
{
  "azure-cli": "2.28.0",
  "azure-cli-core": "2.28.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}
PS C:\azp> openssl version
OpenSSL 1.1.1k  25 Mar 2021

本地系统具有以下azopenssl版本:

(base) PS C:\01_Dev\dockerdevimage> az version

{
  "azure-cli": "2.26.1",
  "azure-cli-core": "2.26.1",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}
(base) PS C:\01_Dev\dockerdevimage> openssl version

OpenSSL 1.1.1c  28 May 2019

我试图理解为什么会出现这个错误,所以我用openssl测试了连接,如下所示:

PS C:\azp> openssl s_client -proxy 10.76.209.147:3128 -connect login.microsoftonline.com:443 -showcerts
CONNECTED(00000180)
Can't use SSL_get_servername
depth=2 DC = org, DC = my-domain, CN = PKI, CN = BB-CA-DD   <-- edited manually
verify error:num=19:self signed certificate in certificate chain
verify return:1

我还使用相同的代理服务器和Linux容器进行了测试,az命令按预期工作:

$ az version
{
  "azure-cli": "2.25.0",
  "azure-cli-core": "2.25.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}

$ openssl version                                                                             
OpenSSL 1.1.1f  31 Mar 2020

$ az login --tenant my-domain.org 
The default web browser has been opened at https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.
You have logged in. Now let us find all the subscriptions to which you have access...
[
  {
    "cloudName": "AzureCloud",
...

在Linux容器上,openssl命令返回以下输出:

$ openssl s_client -proxy 10.76.209.147:3128 -connect login.microsoftonline.com:443 -showcerts
Can't use SSL_get_servername
depth=2 DC = org, DC = my-domain, CN = PKI, CN = BB-CA-DD
verify return:1

我还根据此链接使用以下命令导入了证书:

PS C:\azp> Import-Certificate -FilePath .\BB-CA-DD.crt -CertStoreLocation Cert:\LocalMachine\Root\

没有变化我不知道该怎么做。
也许这个问题与以下帖子和文章有关:

编辑:
我已经将解决方案从这里移到了"答案"块,以强调我的问题已经解决。根据React,我得出结论,它对其他人也确实有用。

idfiyjo8

idfiyjo81#

最后,我能够解决这个问题,如下所示:
我找到了以下文档:
Setting up certificates for Azure CLI on Azure Stack Development Kit
基本思路是找到用于Azure CLI的Python安装并更新相关证书文件。
在我的示例中,Azure CLI与python一起安装在以下位置:
C:\程序文件(x86)\Microsoft软件开发工具包\Azure \CLI2\python.exe
使用建议的命令,返回如下:

PS > & "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe" -c "import certifi; print(certifi.where())"
C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem

更新上面提到的文件为我解决了az login的问题。my-domain.org提供的一个python安装包含一个正确配置的cacert.pem文件。

egdjgwm8

egdjgwm82#

您可以使用以下方法
Azure CLI正在此位置查找证书(如果使用Windows)
默认证书颁发机构捆绑包Windows C:\程序文件(x86)\Microsoft SDK\Azure\CLI2\库\站点包\证书\cacert.pem
下载Azure门户的证书(portal.azure.com)
将证书附加到上述cacert.pem文件中,并在重新启动powershell后再次尝试Az登录。

或者

如果你通过代理服务器使用Azure CLI,可能会导致以下错误:SSLError(“错误的握手:错误([('SSL routines','tls_process_server_certificate','证书验证失败')],)",)。若要解决此错误,请将环境变量REQUESTS_CA_BUNDLE设置为PEM格式的证书颁发机构捆绑包证书文件的路径。
将代理服务器的证书附加到此文件或将内容复制到另一个证书文件,然后将REQUESTS_CA_BUNDLE设置到此文件。您可能还需要设置HTTP_PROXY或HTTPS_PROXY环境变量。
链接到Ms Docs解决方案

mpbci0fu

mpbci0fu3#

我通过为IPv4更改DNS解决了这个问题。也许它也可以为您工作。我在更改DNS后运行az upgrade命令。当我运行az upgrade时,同时给出此错误,它说“检查Internet连接”。它升级成功,相关错误已解决。
我用谷歌DNS作为DNS.
8.8.8.8
8.8.4.4
然后我设置DNS为自动选项。我可以继续使用它没有任何问题。我现在可以访问与az login命令。

相关问题