I am using Office365-REST-Python-Client to connect to a SharePoint server with Python:
from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.userCredential import UserCredential
username = 'email_address'
password = 'password'
ctx = ClientContext("https://[tenant].sharepoint.com/sites/mySite").with_credentials(UserCredential(username, password))
web = ctx.web.load().execute_query()
This results in:
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-14-a0545a904a3e> in <module>
      2 password = 'password'
      3 ctx = ClientContext("https://[tenant].sharepoint.com/sites/mySite").with_credentials(UserCredential(username, password))
----> 4 web = ctx.web.load().execute_query()
C:\ProgramData\Anaconda3\envs\office365\lib\site-packages\office365\sharepoint\base_entity.py in execute_query(self)
     22 
     23     def execute_query(self):
---> 24         self.context.execute_query()
     25         return self
     26 
C:\ProgramData\Anaconda3\envs\office365\lib\site-packages\office365\runtime\client_runtime_context.py in execute_query(self)
     54     def execute_query(self):
     55         while self.has_pending_request:
---> 56             self.get_pending_request().execute_query()
     57             query = self.get_pending_request().current_query
     58             self.afterExecuteOnce.notify(query.return_type)
C:\ProgramData\Anaconda3\envs\office365\lib\site-packages\office365\runtime\client_request.py in execute_query(self)
     39             request = self.build_request()
     40             self.beforeExecute.notify(request)
---> 41             response = self.execute_request_direct(request)
     42             response.raise_for_status()
     43             self.process_response(response)
C:\ProgramData\Anaconda3\envs\office365\lib\site-packages\office365\runtime\odata\odata_request.py in execute_request_direct(self, request)
     35         request.ensure_header('Content-Type', media_type)
     36         request.ensure_header('Accept', media_type)
---> 37         return super(ODataRequest, self).execute_request_direct(request)
     38 
     39     @property
C:\ProgramData\Anaconda3\envs\office365\lib\site-packages\office365\runtime\client_request.py in execute_request_direct(self, request_options)
     51         :type request_options: RequestOptions
     52         """
---> 53         self.context.authenticate_request(request_options)
     54         if request_options.method == HttpMethod.Post:
     55             if request_options.is_bytes or request_options.is_file:
C:\ProgramData\Anaconda3\envs\office365\lib\site-packages\office365\sharepoint\client_context.py in authenticate_request(self, request)
    115     def authenticate_request(self, request):
    116         if not self.authentication_context.is_authenticated:
--> 117             self.authentication_context.acquire_token()
    118 
    119         super(ClientContext, self).authenticate_request(request)
C:\ProgramData\Anaconda3\envs\office365\lib\site-packages\office365\runtime\auth\authentication_context.py in acquire_token(self)
     36             return self.acquire_token_for_app(self.credentials.clientId, self.credentials.clientSecret)
     37         elif isinstance(self.credentials, UserCredential):
---> 38             return self.acquire_token_for_user(self.credentials.userName, self.credentials.password)
     39         else:
     40             raise ValueError("Unknown credential type")
C:\ProgramData\Anaconda3\envs\office365\lib\site-packages\office365\runtime\auth\authentication_context.py in acquire_token_for_user(self, username, password)
     48         self.provider = SamlTokenProvider(self.url, username, password)
     49         if not self.provider.acquire_token():
---> 50             raise ValueError('Acquire token failed: {0}'.format(self.provider.error))
     51         return True
     52 
ValueError: Acquire token failed: Error: HTTPSConnectionPool(host='[tenant].sharepoint.com', port=port_number): Max retries exceeded with url: /_forms/default.aspx?wa=wsignin1.0 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')))
I tried adding the site certificate to the certifi cacert.pem file with the top answer here: Unable to get local issuer certificate when using requests in python, but this resulted in the same error.
My versions are:
- certifi: 2020.6.20
- Office365-REST-Python-Client: 2.1.10
- Python: 3.8.3
What other steps can I take to resolve this error?
 
    