0

I have a problem. I am using easypost. The problem is that I got the following error

WARNING:urllib3.connectionpool:Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)'))': /v2/shipments.

Is there any option to deactive the ssl for the method ?

!pip install easypost
import os
import easypost
easypost.api_key = <app_key>
shipment = easypost.Shipment.create(
    from_address = {
        "name": "EasyPost",
        "street1": "118 2nd Street",
        "street2": "4th Floor",
        "city": "San Francisco",
        "state": "CA",
        "zip": "94105",
        "country": "US",
        "phone": "415-456-7890",
    },
    to_address = {
        "name": "Dr. Steve Brule",
        "street1": "179 N Harbor Dr",
        "city": "Redondo Beach",
        "state": "CA",
        "zip": "90277",
        "country": "US",
        "phone": "310-808-5243",
    },
    parcel = {
        "length": 10.2,
        "width": 7.8,
        "height": 4.3,
        "weight": 21.2,
    },
)
shipment.buy(rate=shipment.lowest_rate())
print(shipment)

Complete Log

WARNING:urllib3.connectionpool:Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)'))': /v2/shipments
WARNING:urllib3.connectionpool:Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)'))': /v2/shipments
WARNING:urllib3.connectionpool:Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)'))': /v2/shipments
---------------------------------------------------------------------------
SSLCertVerificationError                  Traceback (most recent call last)
File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:703, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    702 # Make the request on the httplib connection object.
--> 703 httplib_response = self._make_request(
    704     conn,
    705     method,
    706     url,
    707     timeout=timeout_obj,
    708     body=body,
    709     headers=headers,
    710     chunked=chunked,
    711 )
    713 # If we're going to release the connection in ``finally:``, then
    714 # the response doesn't need to know about the connection. Otherwise
    715 # it will also try to release it and we'll have a double-release
    716 # mess.

File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:386, in HTTPConnectionPool._make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    385 try:
--> 386     self._validate_conn(conn)
    387 except (SocketTimeout, BaseSSLError) as e:
    388     # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout.

File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:1040, in HTTPSConnectionPool._validate_conn(self, conn)
   1039 if not getattr(conn, "sock", None):  # AppEngine might not have  `.sock`
-> 1040     conn.connect()
   1042 if not conn.is_verified:

File ~\Anaconda3\lib\site-packages\urllib3\connection.py:414, in HTTPSConnection.connect(self)
    412     context.load_default_certs()
--> 414 self.sock = ssl_wrap_socket(
    415     sock=conn,
    416     keyfile=self.key_file,
    417     certfile=self.cert_file,
    418     key_password=self.key_password,
    419     ca_certs=self.ca_certs,
    420     ca_cert_dir=self.ca_cert_dir,
    421     ca_cert_data=self.ca_cert_data,
    422     server_hostname=server_hostname,
    423     ssl_context=context,
    424     tls_in_tls=tls_in_tls,
    425 )
    427 # If we're using all defaults and the connection
    428 # is TLSv1 or TLSv1.1 we throw a DeprecationWarning
    429 # for the host.

File ~\Anaconda3\lib\site-packages\urllib3\util\ssl_.py:449, 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)
    448 if send_sni:
--> 449     ssl_sock = _ssl_wrap_socket_impl(
    450         sock, context, tls_in_tls, server_hostname=server_hostname
    451     )
    452 else:

File ~\Anaconda3\lib\site-packages\urllib3\util\ssl_.py:493, in _ssl_wrap_socket_impl(sock, ssl_context, tls_in_tls, server_hostname)
    492 if server_hostname:
--> 493     return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
    494 else:

File ~\Anaconda3\lib\ssl.py:500, in SSLContext.wrap_socket(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, session)
    494 def wrap_socket(self, sock, server_side=False,
    495                 do_handshake_on_connect=True,
    496                 suppress_ragged_eofs=True,
    497                 server_hostname=None, session=None):
    498     # SSLSocket class handles server_hostname encoding before it calls
    499     # ctx._wrap_socket()
--> 500     return self.sslsocket_class._create(
    501         sock=sock,
    502         server_side=server_side,
    503         do_handshake_on_connect=do_handshake_on_connect,
    504         suppress_ragged_eofs=suppress_ragged_eofs,
    505         server_hostname=server_hostname,
    506         context=self,
    507         session=session
    508     )

File ~\Anaconda3\lib\ssl.py:1040, in SSLSocket._create(cls, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, context, session)
   1039             raise ValueError("do_handshake_on_connect should not be specified for non-blocking sockets")
-> 1040         self.do_handshake()
   1041 except (OSError, ValueError):

File ~\Anaconda3\lib\ssl.py:1309, in SSLSocket.do_handshake(self, block)
   1308         self.settimeout(None)
-> 1309     self._sslobj.do_handshake()
   1310 finally:

SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)

During handling of the above exception, another exception occurred:

MaxRetryError                             Traceback (most recent call last)
File ~\Anaconda3\lib\site-packages\requests\adapters.py:440, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
    439 if not chunked:
--> 440     resp = conn.urlopen(
    441         method=request.method,
    442         url=url,
    443         body=request.body,
    444         headers=request.headers,
    445         redirect=False,
    446         assert_same_host=False,
    447         preload_content=False,
    448         decode_content=False,
    449         retries=self.max_retries,
    450         timeout=timeout
    451     )
    453 # Send the request.
    454 else:

File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:813, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    810     log.warning(
    811         "Retrying (%r) after connection broken by '%r': %s", retries, err, url
    812     )
--> 813     return self.urlopen(
    814         method,
    815         url,
    816         body,
    817         headers,
    818         retries,
    819         redirect,
    820         assert_same_host,
    821         timeout=timeout,
    822         pool_timeout=pool_timeout,
    823         release_conn=release_conn,
    824         chunked=chunked,
    825         body_pos=body_pos,
    826         **response_kw
    827     )
    829 # Handle redirect?

File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:813, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    810     log.warning(
    811         "Retrying (%r) after connection broken by '%r': %s", retries, err, url
    812     )
--> 813     return self.urlopen(
    814         method,
    815         url,
    816         body,
    817         headers,
    818         retries,
    819         redirect,
    820         assert_same_host,
    821         timeout=timeout,
    822         pool_timeout=pool_timeout,
    823         release_conn=release_conn,
    824         chunked=chunked,
    825         body_pos=body_pos,
    826         **response_kw
    827     )
    829 # Handle redirect?

File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:813, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    810     log.warning(
    811         "Retrying (%r) after connection broken by '%r': %s", retries, err, url
    812     )
--> 813     return self.urlopen(
    814         method,
    815         url,
    816         body,
    817         headers,
    818         retries,
    819         redirect,
    820         assert_same_host,
    821         timeout=timeout,
    822         pool_timeout=pool_timeout,
    823         release_conn=release_conn,
    824         chunked=chunked,
    825         body_pos=body_pos,
    826         **response_kw
    827     )
    829 # Handle redirect?

File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:785, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    783     e = ProtocolError("Connection aborted.", e)
--> 785 retries = retries.increment(
    786     method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
    787 )
    788 retries.sleep()

File ~\Anaconda3\lib\site-packages\urllib3\util\retry.py:592, in Retry.increment(self, method, url, response, error, _pool, _stacktrace)
    591 if new_retry.is_exhausted():
--> 592     raise MaxRetryError(_pool, url, error or ResponseError(cause))
    594 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry)

MaxRetryError: HTTPSConnectionPool(host='api.easypost.com', port=443): Max retries exceeded with url: /v2/shipments (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)')))

During handling of the above exception, another exception occurred:

SSLError                                  Traceback (most recent call last)
File ~\Anaconda3\lib\site-packages\easypost\requestor.py:222, in Requestor.requests_request(self, method, abs_url, headers, params)
    221 try:
--> 222     result = requests_session.request(
    223         method=method.value,
    224         url=abs_url,
    225         params=url_params,
    226         headers=headers,
    227         json=body,
    228         timeout=timeout,
    229         verify=True,
    230     )
    231     http_body = result.text

File ~\Anaconda3\lib\site-packages\requests\sessions.py:529, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    528 send_kwargs.update(settings)
--> 529 resp = self.send(prep, **send_kwargs)
    531 return resp

File ~\Anaconda3\lib\site-packages\requests\sessions.py:645, in Session.send(self, request, **kwargs)
    644 # Send the request
--> 645 r = adapter.send(request, **kwargs)
    647 # Total elapsed time of the request (approximately)

File ~\Anaconda3\lib\site-packages\requests\adapters.py:517, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
    515 if isinstance(e.reason, _SSLError):
    516     # This branch is for urllib3 v1.22 and later.
--> 517     raise SSLError(e, request=request)
    519 raise ConnectionError(e, request=request)

SSLError: HTTPSConnectionPool(host='api.easypost.com', port=443): Max retries exceeded with url: /v2/shipments (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)')))

During handling of the above exception, another exception occurred:

Error                                     Traceback (most recent call last)
Input In [52], in <cell line: 6>()
      2 import easypost
      4 easypost.api_key = <apikey>
----> 6 shipment = easypost.Shipment.create(
      7     from_address = {
      8         "name": "EasyPost",
      9         "street1": "118 2nd Street",
     10         "street2": "4th Floor",
     11         "city": "San Francisco",
     12         "state": "CA",
     13         "zip": "94105",
     14         "country": "US",
     15         "phone": "415-456-7890",
     16     },
     17     to_address = {
     18         "name": "Dr. Steve Brule",
     19         "street1": "179 N Harbor Dr",
     20         "city": "Redondo Beach",
     21         "state": "CA",
     22         "zip": "90277",
     23         "country": "US",
     24         "phone": "310-808-5243",
     25     },
     26     parcel = {
     27         "length": 10.2,
     28         "width": 7.8,
     29         "height": 4.3,
     30         "weight": 21.2,
     31     },
     32 )
     34 shipment.buy(rate=shipment.lowest_rate())
     36 print(shipment)

File ~\Anaconda3\lib\site-packages\easypost\shipment.py:32, in Shipment.create(cls, api_key, with_carbon_offset, **params)
     27 url = cls.class_url()
     28 wrapped_params = {
     29     cls.snakecase_name(): params,
     30     "carbon_offset": with_carbon_offset,
     31 }
---> 32 response, api_key = requestor.request(method=RequestMethod.POST, url=url, params=wrapped_params)
     33 return convert_to_easypost_object(response=response, api_key=api_key)

File ~\Anaconda3\lib\site-packages\easypost\requestor.py:91, in Requestor.request(self, method, url, params, api_key_required, beta)
     89 if params is None:
     90     params = {}
---> 91 http_body, http_status, my_api_key = self.request_raw(
     92     method=method,
     93     url=url,
     94     params=params,
     95     api_key_required=api_key_required,
     96     beta=beta,
     97 )
     98 response = self.interpret_response(http_body=http_body, http_status=http_status)
     99 return response, my_api_key

File ~\Anaconda3\lib\site-packages\easypost\requestor.py:177, in Requestor.request_raw(self, method, url, params, api_key_required, beta)
    173     http_body, http_status = self.urlfetch_request(
    174         method=method, abs_url=abs_url, headers=headers, params=params
    175     )
    176 elif request_lib == "requests":
--> 177     http_body, http_status = self.requests_request(
    178         method=method, abs_url=abs_url, headers=headers, params=params
    179     )
    180 else:
    181     raise Error(f"Bug discovered: invalid request_lib: {request_lib}. Please report to {SUPPORT_EMAIL}.")

File ~\Anaconda3\lib\site-packages\easypost\requestor.py:234, in Requestor.requests_request(self, method, abs_url, headers, params)
    232     http_status = result.status_code
    233 except Exception as e:
--> 234     raise Error(
    235         "Unexpected error communicating with EasyPost. If this "
    236         f"problem persists please let us know at {SUPPORT_EMAIL}.",
    237         original_exception=e,
    238     )
    239 return http_body, http_status

Error: Unexpected error communicating with EasyPost. If this problem persists please let us know at support@easypost.com.

For Postman, if I I am deactivating SSL certificate verification it works. What I got with:

enter image description here

Enable SSL certificate verification


If am calling directly the api and using verify=false that works. See Python Requests throwing SSLError.

import requests
url = "https://api.easypost.com/something"
returnResponse = requests.get(url, verify=False)


Edit

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
File ~\Anaconda3\lib\site-packages\easypost\requestor.py:222, in Requestor.requests_request(self, method, abs_url, headers, params)
    221 try:
--> 222     result = requests_session.request(
    223         method=method.value,
    224         url=abs_url,
    225         params=url_params,
    226         headers=headers,
    227         json=body,
    228         timeout=timeout,
    229         verify=False,
    230     )
    231     http_body = result.text

File ~\Anaconda3\lib\site-packages\requests\sessions.py:587, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    586 send_kwargs.update(settings)
--> 587 resp = self.send(prep, **send_kwargs)
    589 return resp

File ~\Anaconda3\lib\site-packages\requests\sessions.py:701, in Session.send(self, request, **kwargs)
    700 # Send the request
--> 701 r = adapter.send(request, **kwargs)
    703 # Total elapsed time of the request (approximately)

File ~\Anaconda3\lib\site-packages\requests\adapters.py:489, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
    488 if not chunked:
--> 489     resp = conn.urlopen(
    490         method=request.method,
    491         url=url,
    492         body=request.body,
    493         headers=request.headers,
    494         redirect=False,
    495         assert_same_host=False,
    496         preload_content=False,
    497         decode_content=False,
    498         retries=self.max_retries,
    499         timeout=timeout,
    500     )
    502 # Send the request.
    503 else:

File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:703, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    702 # Make the request on the httplib connection object.
--> 703 httplib_response = self._make_request(
    704     conn,
    705     method,
    706     url,
    707     timeout=timeout_obj,
    708     body=body,
    709     headers=headers,
    710     chunked=chunked,
    711 )
    713 # If we're going to release the connection in ``finally:``, then
    714 # the response doesn't need to know about the connection. Otherwise
    715 # it will also try to release it and we'll have a double-release
    716 # mess.

File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:386, in HTTPConnectionPool._make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    385 try:
--> 386     self._validate_conn(conn)
    387 except (SocketTimeout, BaseSSLError) as e:
    388     # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout.

File ~\Anaconda3\lib\site-packages\urllib3\connectionpool.py:1040, in HTTPSConnectionPool._validate_conn(self, conn)
   1039 if not getattr(conn, "sock", None):  # AppEngine might not have  `.sock`
-> 1040     conn.connect()
   1042 if not conn.is_verified:

File ~\Anaconda3\lib\site-packages\urllib3\connection.py:401, in HTTPSConnection.connect(self)
    400 context = self.ssl_context
--> 401 context.verify_mode = resolve_cert_reqs(self.cert_reqs)
    403 # Try to load OS default certs if none are given.
    404 # Works well on Windows (requires Python3.4+)

File ~\Anaconda3\lib\ssl.py:720, in SSLContext.verify_mode(self, value)
    718 @verify_mode.setter
    719 def verify_mode(self, value):
--> 720     super(SSLContext, SSLContext).verify_mode.__set__(self, value)

ValueError: Cannot set verify_mode to CERT_NONE when check_hostname is enabled.

During handling of the above exception, another exception occurred:

Error                                     Traceback (most recent call last)
Input In [5], in <cell line: 6>()
      2 import easypost
      4 easypost.api_key = <apikey>
----> 6 shipment = easypost.Shipment.create(
      7     from_address = {
      8         "name": "EasyPost",
      9         "street1": "118 2nd Street",
     10         "street2": "4th Floor",
     11         "city": "San Francisco",
     12         "state": "CA",
     13         "zip": "94105",
     14         "country": "US",
     15         "phone": "415-456-7890",
     16     },
     17     to_address = {
     18         "name": "Dr. Steve Brule",
     19         "street1": "179 N Harbor Dr",
     20         "city": "Redondo Beach",
     21         "state": "CA",
     22         "zip": "90277",
     23         "country": "US",
     24         "phone": "310-808-5243",
     25     },
     26     parcel = {
     27         "length": 10.2,
     28         "width": 7.8,
     29         "height": 4.3,
     30         "weight": 21.2,
     31     },
     32 )
     34 shipment.buy(rate=shipment.lowest_rate())
     36 print(shipment)

File ~\Anaconda3\lib\site-packages\easypost\shipment.py:32, in Shipment.create(cls, api_key, with_carbon_offset, **params)
     27 url = cls.class_url()
     28 wrapped_params = {
     29     cls.snakecase_name(): params,
     30     "carbon_offset": with_carbon_offset,
     31 }
---> 32 response, api_key = requestor.request(method=RequestMethod.POST, url=url, params=wrapped_params)
     33 return convert_to_easypost_object(response=response, api_key=api_key)

File ~\Anaconda3\lib\site-packages\easypost\requestor.py:91, in Requestor.request(self, method, url, params, api_key_required, beta)
     89 if params is None:
     90     params = {}
---> 91 http_body, http_status, my_api_key = self.request_raw(
     92     method=method,
     93     url=url,
     94     params=params,
     95     api_key_required=api_key_required,
     96     beta=beta,
     97 )
     98 response = self.interpret_response(http_body=http_body, http_status=http_status)
     99 return response, my_api_key

File ~\Anaconda3\lib\site-packages\easypost\requestor.py:177, in Requestor.request_raw(self, method, url, params, api_key_required, beta)
    173     http_body, http_status = self.urlfetch_request(
    174         method=method, abs_url=abs_url, headers=headers, params=params
    175     )
    176 elif request_lib == "requests":
--> 177     http_body, http_status = self.requests_request(
    178         method=method, abs_url=abs_url, headers=headers, params=params
    179     )
    180 else:
    181     raise Error(f"Bug discovered: invalid request_lib: {request_lib}. Please report to {SUPPORT_EMAIL}.")

File ~\Anaconda3\lib\site-packages\easypost\requestor.py:234, in Requestor.requests_request(self, method, abs_url, headers, params)
    232     http_status = result.status_code
    233 except Exception as e:
--> 234     raise Error(
    235         "Unexpected error communicating with EasyPost. If this "
    236         f"problem persists please let us know at {SUPPORT_EMAIL}.",
    237         original_exception=e,
    238     )
    239 return http_body, http_status

Error: Unexpected error communicating with EasyPost. If this problem persists please let us know at support@easypost.com.
Test
  • 571
  • 13
  • 32
  • Have you tried to disable the ssl warnings from urllib3? `import urllib3` `urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)` – Cow Aug 15 '22 at 08:30
  • @user56700 thanks for the hint! Yes I tried that. It does not work. – Test Aug 15 '22 at 08:37
  • Just checking - you don't have a proxy app (eg. Burp Suite) open? Also, does this only occur with this specific website, or do none of your HTTP requests work within Python? – SuperStormer Aug 15 '22 at 08:41
  • @SuperStormer I do not think so. And I got a similar error for `geopy.geocoders`. I fix that with `import certifi import ssl import geopy.geocoders ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE geopy.geocoders.options.default_ssl_context = ctx` – Test Aug 15 '22 at 08:52
  • Are you doing your requests from inside a company or something similar? If you want to set the verify to false in the easypost library, you could open the requestor.py and search for verify=True, then change it to False. It's on line 229. – Cow Aug 15 '22 at 08:55
  • @user56700 Yes, I am inside a company. I installed `easypost` with `pip install easypost` inside a Anaconda enviorment. How could I change the ` requestor.py` and set it to `verify=False` – Test Aug 15 '22 at 08:57
  • Search for the file on your computer. **Maybe** your company has enforced policies that conflict with the requests you are trying to do and blocking some returned certificates. – Cow Aug 15 '22 at 08:58
  • @user56700 thanks. I changed it: I got `ValueError: Cannot set verify_mode to CERT_NONE when check_hostname is enabled.`. – Test Aug 15 '22 at 09:00
  • @Test Please add the full traceback message to your question so that I can find it. – Cow Aug 15 '22 at 09:03
  • @Test Hmm, weird that the error is being raised in the ssl module. I would change verify=False back to True and contact the easypost support instead and ask them how to disable SSL checking. – Cow Aug 15 '22 at 09:08

1 Answers1

0

There is additional context for this issue that can be found here: https://github.com/EasyPost/easypost-python/issues/222.

EasyPost does not provide a way to disable SSL checking and has no plans to add this functionality. Some additional resources that may be helpful could be found here:

It sounds like there is something local to your environment that needs adjusting. I would strongly recommend fixing this certificate/SSL error at the source rather than turning it off as this is a security risk. Best of luck.

Justin Hammond
  • 595
  • 8
  • 20