SSL-certificate verify fiailed

In mijn python-script kan ik gewoon verbinding maken met de API van ruimtelijkeplannen.nl. Maar als ik het eerste plan wil downloaden via de API krijg ik (al een week of wat) de foutmelding:

URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1007)>

Nu heb ik mijn Anaconda en Spyder omgeving al opnieuw geïnstalleerd maar de error blijft staan. Heeft iemand een idee waar het hem in kan zitten?

Ik kom niet veel verder met de oplssing uit Stackoverflow:
https://stackoverflow.com/questions/27835619/urllib-and-ssl-certificate-verify-failed-error

On Windows, Python does not look at the system certificate, it uses its own located at ?\lib\site-packages\certifi\cacert.pem.

The solution to your problem:

  1. download the domain validation certificate as *.crt or *pem file
  2. open the file in editor and copy it’s content to clipboard
  3. find your cacert.pem location: from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
  4. edit the cacert.pem file and paste your domain validation certificate at the end of the file.
  5. Save the file and enjoy requests!

Wat is de ‘domain validation certificate’, bijvoorbeeld?

Het is makkelijker om je te helpen als je de preciese URL post waar je de melding op krijgt. De “API van ruimtelijkeplannen.nl” is helaas niet zo eenduidig.

De URL waar ik het get.request op plaats:

href = f’https://ruimte.omgevingswet.overheid.nl/ruimtelijke-plannen/api/opvragen/v4/plannen?beleidsmatigVerantwoordelijkeOverheid.code={code}&beschikbaarOp={today}T08:59:04Z&status={status}&page={jj}

code is bijvoorbeeld ‘0394’
today: 2023-10-03
status: ‘vigerend’
jj = ‘1’

Vanochtend ben ik erachter gekomen dat het op mijn laptop wel goed gaat. Dus het moet aan een instelling op mijn desktop liggen.

Mijn vermoeden: de website heeft niet de volledige certificaat keten geimplementeerd, maar een bovenliggend certificaat weggelaten. Je wordt dan afhankelijk van dat certificaat op je eigen systeem.

Waar Python z’n certificaten laat weet ik niet. Om welk cert het gaat natuurlijk ook niet.
Vaak kun je bij Python bibliotheken die requests voor je afhandelen (bijvoorbeeld urrlib2 of requests) aangeven dat certificaatfouten genegeerd moeten worden. Niet netjes, maar dan krijg je de boel wel aan de gang.