@@ -462,7 +462,7 @@ def wait_then_open(url):
462462 """
463463 for _ in range (1 , 10 ):
464464 try :
465- urlopen (url , context = _ssl_context () )
465+ _urlopen_read (url )
466466 except URLError :
467467 time .sleep (1 )
468468 break
@@ -1888,7 +1888,7 @@ def k8s_install_kubectl(cmd, client_version='latest', install_location=None, sou
18881888 if client_version == 'latest' :
18891889 latest_version_url = source_url + '/stable.txt'
18901890 logger .warning ('No version specified, will get the latest version of kubectl from "%s"' , latest_version_url )
1891- version = urlopen (source_url + '/stable.txt' , context = _ssl_context ()). read ( )
1891+ version = _urlopen_read (source_url + '/stable.txt' )
18921892 client_version = version .decode ('UTF-8' ).strip ()
18931893 else :
18941894 client_version = "v%s" % client_version
@@ -1954,7 +1954,7 @@ def k8s_install_kubelogin(cmd, client_version='latest', install_location=None, s
19541954 if cloud_name .lower () == 'azurechinacloud' :
19551955 latest_release_url = 'https://mirror.azure.cn/kubernetes/kubelogin/latest'
19561956 logger .warning ('No version specified, will get the latest version of kubelogin from "%s"' , latest_release_url )
1957- latest_release = urlopen (latest_release_url , context = _ssl_context ()). read ( )
1957+ latest_release = _urlopen_read (latest_release_url )
19581958 client_version = json .loads (latest_release )['tag_name' ].strip ()
19591959 else :
19601960 client_version = "v%s" % client_version
@@ -2017,10 +2017,24 @@ def _ssl_context():
20172017 return ssl .create_default_context ()
20182018
20192019
2020+ def _urlopen_read (url , context = None ):
2021+ if context is None :
2022+ context = _ssl_context ()
2023+ try :
2024+ return urlopen (url , context = context ).read ()
2025+ except Exception as ex :
2026+ if "[SSL: CERTIFICATE_VERIFY_FAILED]" in ex and "unable to get local issuer certificate" in ex :
2027+ raise ClientRequestError (
2028+ "SSL certificate verification failed. Please ensure that the python interpreter used by azure-cli uses "
2029+ "the appropriate cert store when making requests. For more details, please refer to "
2030+ "https://github.com/Azure/azure-cli/issues/19305"
2031+ )
2032+ raise ex
2033+
2034+
20202035def _urlretrieve (url , filename ):
2021- req = urlopen (url , context = _ssl_context ())
20222036 with open (filename , "wb" ) as f :
2023- f .write (req . read ( ))
2037+ f .write (_urlopen_read ( url ))
20242038
20252039
20262040def _unzip (src , dest ):
0 commit comments