# Help with error

**URL:** <https://forum.ecmwf.int/t/help-with-error/13287>\
**Category:** API\
**Created:** [2 June 2025 11:46 UTC](https://forum.ecmwf.int/t/help-with-error/13287 "2025-06-02T11:46:18Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Zandi\_Nkonzo](https://forum.ecmwf.int/letter_avatar_proxy/v4/letter/z/b9bd4f/32.png) [@Zandi\_Nkonzo](https://forum.ecmwf.int/u/Zandi_Nkonzo)\
**Post date:** [2 June 2025 11:46 UTC](https://forum.ecmwf.int/t/help-with-error/13287/1 "2025-06-02T11:46:18Z")

</div>

* * *

SSLCertVerificationError Traceback (most recent call last)  
File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\connectionpool.py:464, in HTTPConnectionPool.\_make\_request(self, conn, method, url, body, headers, retries, timeout, chunked, response\_conn, preload\_content, decode\_content, enforce\_content\_length)  
463 try:  
 → 464 self.\_validate\_conn(conn)  
465 except (SocketTimeout, BaseSSLError) as e:

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\connectionpool.py:1093, in HTTPSConnectionPool.\_validate\_conn(self, conn)  
1092 if conn.is\_closed:  
 → 1093 conn.connect()  
1095 # TODO revise this, see [Emit a warning when proxy\_is\_verified is False · Issue #2791 · urllib3/urllib3 · GitHub](https://github.com/urllib3/urllib3/issues/2791)

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\connection.py:741, in HTTPSConnection.connect(self)  
739 server\_hostname\_rm\_dot = server\_hostname.rstrip(“.”)  
 → 741 sock\_and\_verified = \_ssl\_wrap\_socket\_and\_match\_hostname(  
742 sock=sock,  
743 cert\_reqs=self.cert\_reqs,  
744 ssl\_version=self.ssl\_version,  
745 ssl\_minimum\_version=self.ssl\_minimum\_version,  
746 ssl\_maximum\_version=self.ssl\_maximum\_version,  
747 ca\_certs=self.ca\_certs,  
748 ca\_cert\_dir=self.ca\_cert\_dir,  
749 ca\_cert\_data=self.ca\_cert\_data,  
750 cert\_file=self.cert\_file,  
751 key\_file=self.key\_file,  
752 key\_password=self.key\_password,  
753 server\_hostname=server\_hostname\_rm\_dot,  
754 ssl\_context=self.ssl\_context,  
755 tls\_in\_tls=tls\_in\_tls,  
756 assert\_hostname=self.assert\_hostname,  
757 assert\_fingerprint=self.assert\_fingerprint,  
758 )  
759 self.sock = sock\_and\_verified.socket

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\connection.py:920, in \_ssl\_wrap\_socket\_and\_match\_hostname(sock, cert\_reqs, ssl\_version, ssl\_minimum\_version, ssl\_maximum\_version, cert\_file, key\_file, key\_password, ca\_certs, ca\_cert\_dir, ca\_cert\_data, assert\_hostname, assert\_fingerprint, server\_hostname, ssl\_context, tls\_in\_tls)  
918 server\_hostname = normalized  
 → 920 ssl\_sock = ssl\_wrap\_socket(  
921 sock=sock,  
922 keyfile=key\_file,  
923 certfile=cert\_file,  
924 key\_password=key\_password,  
925 ca\_certs=ca\_certs,  
926 ca\_cert\_dir=ca\_cert\_dir,  
927 ca\_cert\_data=ca\_cert\_data,  
928 server\_hostname=server\_hostname,  
929 ssl\_context=context,  
930 tls\_in\_tls=tls\_in\_tls,  
931 )  
933 try:

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\util\ssl\_.py:480, in ssl\_wrap\_socket(sock, keyfile, certfile, cert\_reqs, ca\_certs, server\_hostname, ssl\_version, ciphers, ssl\_context, ca\_cert\_dir, key\_password, ca\_cert\_data, tls\_in\_tls)  
478 context.set\_alpn\_protocols(ALPN\_PROTOCOLS)  
 → 480 ssl\_sock = \_ssl\_wrap\_socket\_impl(sock, context, tls\_in\_tls, server\_hostname)  
481 return ssl\_sock

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\util\ssl\_.py:524, in \_ssl\_wrap\_socket\_impl(sock, ssl\_context, tls\_in\_tls, server\_hostname)  
522 return SSLTransport(sock, ssl\_context, server\_hostname)  
 → 524 return ssl\_context.wrap\_socket(sock, server\_hostname=server\_hostname)

File C:\FITCHDEV\Python\3.12\Lib\ssl.py:455, in SSLContext.wrap\_socket(self, sock, server\_side, do\_handshake\_on\_connect, suppress\_ragged\_eofs, server\_hostname, session)  
449 def wrap\_socket(self, sock, server\_side=False,  
450 do\_handshake\_on\_connect=True,  
451 suppress\_ragged\_eofs=True,  
452 server\_hostname=None, session=None):  
453 # SSLSocket class handles server\_hostname encoding before it calls  
454 # ctx.\_wrap\_socket()  
 → 455 return self.sslsocket\_class.\_create(  
456 sock=sock,  
457 server\_side=server\_side,  
458 do\_handshake\_on\_connect=do\_handshake\_on\_connect,  
459 suppress\_ragged\_eofs=suppress\_ragged\_eofs,  
460 server\_hostname=server\_hostname,  
461 context=self,  
462 session=session  
463 )

File C:\FITCHDEV\Python\3.12\Lib\ssl.py:1041, in SSLSocket.\_create(cls, sock, server\_side, do\_handshake\_on\_connect, suppress\_ragged\_eofs, server\_hostname, context, session)  
1040 raise ValueError(“do\_handshake\_on\_connect should not be specified for non-blocking sockets”)  
 → 1041 self.do\_handshake()  
1042 except:

File C:\FITCHDEV\Python\3.12\Lib\ssl.py:1319, in SSLSocket.do\_handshake(self, block)  
1318 self.settimeout(None)  
 → 1319 self.\_sslobj.do\_handshake()  
1320 finally:

SSLCertVerificationError: [SSL: CERTIFICATE\_VERIFY\_FAILED] certificate verify failed: unable to get local issuer certificate (\_ssl.c:1010)

During handling of the above exception, another exception occurred:

SSLError Traceback (most recent call last)  
File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\connectionpool.py:787, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert\_same\_host, timeout, pool\_timeout, release\_conn, chunked, body\_pos, preload\_content, decode\_content, \*\*response\_kw)  
786 # Make the request on the HTTPConnection object  
 → 787 response = self.\_make\_request(  
788 conn,  
789 method,  
790 url,  
791 timeout=timeout\_obj,  
792 body=body,  
793 headers=headers,  
794 chunked=chunked,  
795 retries=retries,  
796 response\_conn=response\_conn,  
797 preload\_content=preload\_content,  
798 decode\_content=decode\_content,  
799 \*\*response\_kw,  
800 )  
802 # Everything went great!

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\connectionpool.py:488, in HTTPConnectionPool.\_make\_request(self, conn, method, url, body, headers, retries, timeout, chunked, response\_conn, preload\_content, decode\_content, enforce\_content\_length)  
487 new\_e = \_wrap\_proxy\_error(new\_e, conn.proxy.scheme)  
 → 488 raise new\_e  
490 # conn.request() calls http.client.\*.request, not the method in  
491 # urllib3.request. It also calls makefile (recv) on the socket.

SSLError: [SSL: CERTIFICATE\_VERIFY\_FAILED] certificate verify failed: unable to get local issuer certificate (\_ssl.c:1010)

The above exception was the direct cause of the following exception:

MaxRetryError Traceback (most recent call last)  
File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\requests\adapters.py:667, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)  
666 try:  
 → 667 resp = conn.urlopen(  
668 method=request.method,  
669 url=url,  
670 body=request.body,  
671 headers=request.headers,  
672 redirect=False,  
673 assert\_same\_host=False,  
674 preload\_content=False,  
675 decode\_content=False,  
676 retries=self.max\_retries,  
677 timeout=timeout,  
678 chunked=chunked,  
679 )  
681 except (ProtocolError, OSError) as err:

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\connectionpool.py:841, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert\_same\_host, timeout, pool\_timeout, release\_conn, chunked, body\_pos, preload\_content, decode\_content, \*\*response\_kw)  
839 new\_e = ProtocolError(“Connection aborted.”, new\_e)  
 → 841 retries = retries.increment(  
842 method, url, error=new\_e, \_pool=self, \_stacktrace=sys.exc\_info()[2]  
843 )  
844 retries.sleep()

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\urllib3\util\retry.py:519, in Retry.increment(self, method, url, response, error, \_pool, \_stacktrace)  
518 reason = error or ResponseError(cause)  
 → 519 raise MaxRetryError(\_pool, url, reason) from reason # type: ignore[arg-type]  
521 log.debug(“Incremented Retry for (url=‘%s’): %r”, url, new\_retry)

MaxRetryError: HTTPSConnectionPool(host=‘cds.climate.copernicus.eu’, port=443): Max retries exceeded with url: /api/v2/retrieve/v1/processes/reanalysis-era5-pressure-levels (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE\_VERIFY\_FAILED] certificate verify failed: unable to get local issuer certificate (\_ssl.c:1010)’)))

During handling of the above exception, another exception occurred:

SSLError Traceback (most recent call last)  
Cell In[4], line 18  
6 request = {  
7 ‘product\_type’: [‘reanalysis’],  
8 ‘variable’: [‘geopotential’],  
(…) 14 ‘data\_format’: ‘netcdf’,  
15 }  
16 target = ‘download.nc’  
—\> 18 client.retrieve(dataset, request, target)

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\ecmwf\datastores\legacy\_client.py:167, in LegacyClient.retrieve(self, name, request, target)  
165 submitted: datastores.Remote | datastores.Results  
166 if self.wait\_until\_complete:  
 → 167 submitted = self.client.submit\_and\_wait\_on\_results(  
168 collection\_id=name,  
169 request=request,  
170 )  
171 else:  
172 submitted = self.client.submit(  
173 collection\_id=name,  
174 request=request,  
175 )

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\ecmwf\datastores\client.py:397, in Client.submit\_and\_wait\_on\_results(self, collection\_id, request)  
381 def submit\_and\_wait\_on\_results(  
382 self, collection\_id: str, request: dict[str, Any]  
383 ) → datastores.Results:  
384 “”“Submit a request and wait for the results to be ready.  
385  
386 Parameters  
(…) 395 datastores.Results  
396 “””  
 → 397 return self.\_retrieve\_api.submit(collection\_id, request).get\_results()

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\ecmwf\datastores\processing.py:793, in Processing.submit(self, collection\_id, request)  
792 def submit(self, collection\_id: str, request: dict[str, Any]) → Remote:  
 → 793 return self.get\_process(collection\_id).submit(request)

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\ecmwf\datastores\processing.py:782, in Processing.get\_process(self, process\_id)  
780 def get\_process(self, process\_id: str) → Process:  
781 url = f"{self.url}/processes/{process\_id}"  
 → 782 return Process.from\_request(“get”, url, \*\*self.\_request\_kwargs)

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\ecmwf\datastores\processing.py:171, in ApiResponse.from\_request(cls, method, url, headers, session, retry\_options, request\_options, download\_options, sleep\_max, cleanup, log\_callback, log\_messages, \*\*kwargs)  
165 inputs = kwargs.get(“json”, {}).get(“inputs”, {})  
166 log(  
167 logging.DEBUG,  
168 f"{method.upper()} {url} {inputs or ‘’}“.strip(),  
169 callback=log\_callback,  
170 )  
 → 171 response = robust\_request(  
172 method, url, headers=headers, \*\*request\_options, \*\*kwargs  
173 )  
174 log(logging.DEBUG, f"REPLY {response.text}”, callback=log\_callback)  
176 cads\_raise\_for\_status(response)

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\multiurl\http.py:479, in robust..wrapped(url, \*args, \*\*kwargs)  
476 return call(main\_url, \*args, \*\*kwargs)  
478 try:  
 → 479 r = call(main\_url, \*args, \*\*kwargs)  
480 except requests.exceptions.SSLError:  
481 raise

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\requests\sessions.py:589, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow\_redirects, proxies, hooks, stream, verify, cert, json)  
584 send\_kwargs = {  
585 “timeout”: timeout,  
586 “allow\_redirects”: allow\_redirects,  
587 }  
588 send\_kwargs.update(settings)  
 → 589 resp = self.send(prep, \*\*send\_kwargs)  
591 return resp

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\requests\sessions.py:703, in Session.send(self, request, \*\*kwargs)  
700 start = preferred\_clock()  
702 # Send the request  
 → 703 r = adapter.send(request, \*\*kwargs)  
705 # Total elapsed time of the request (approximately)  
706 elapsed = preferred\_clock() - start

File c:\FITCHDEV\INDEX\_ESG.venv\Lib\site-packages\requests\adapters.py:698, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)  
694 raise ProxyError(e, request=request)  
696 if isinstance(e.reason, \_SSLError):  
697 # This branch is for urllib3 v1.22 and later.  
 → 698 raise SSLError(e, request=request)  
700 raise ConnectionError(e, request=request)  
702 except ClosedPoolError as e:

SSLError: HTTPSConnectionPool(host=‘cds.climate.copernicus.eu’, port=443): Max retries exceeded with url: /api/v2/retrieve/v1/processes/reanalysis-era5-pressure-levels (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE\_VERIFY\_FAILED] certificate verify failed: unable to get local issuer certificate (\_ssl.c:1010)’)))

the above error keeps showing up when i try use the API anyone know why
