Python: SSL Error hostname does not match

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • KlaasJanBolhuis
  • Registratie: November 2020
  • Laatst online: 04-01 18:46
Mijn vraag
Ik krijg de navolgende foutmelding in python als ik contact wil maken via requests.get met een kastje dat mijn screens met een app kan aansturen.

requests.exceptions.SSLError: HTTPSConnectionPool(host='gateway-XXXX-XXXX-XXXX.local', port=8443): Max retries exceeded with url: /enduser-mobile-web/1/enduserAPI/setup/devices/XXXX-XXXX-XXXX/states (Caused by SSLError(SSLCertVerificationError("hostname 'gateway-XXXX-XXXX-XXXX.local' doesn't match 'XXXX-XXXX-XXX.local'")))

Ik heb een Raspberry en een Somfy Tahoma Switch met een lokale API. Ik heb de code overgenomen van https://github.com/Somfy-...-Developer-Mode/issues/32 en de instructies over genomen van de readme.md.

Wat ik begrijp is het certificaat voor hostnaam: XXXX-XXXX-XXXX.local terwijl de hostnaam gateway-XXXX-XXXX-XXXX.local is. Waar moet ik beginnen met zoeken om dit op te lossen?

Nb: Onderstaand het relevante stukje code dat deze melding veroorzaakt:
## get device list
url_lst = "https://gateway-XXXX-XXXX-XXXX.local:8443/enduser-mobile-web/1/enduserAPI/setup/devices/XXXX-XXXX-XXXX/states"
headers_lst = {"Content-Type": "application/json", "Authorization": "Bearer " + r_gen.json()['token']}
r_lst = s.get(url_lst, headers=headers_lst)

...

Alle reacties


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Heb je dit ook gedaan dan?

Kopieer de .crt die je daar vindt naar /usr/local/share/ca-certificates/ en run sudo update-ca-certificates. That should do it.

[ Voor 39% gewijzigd door RobIII op 29-06-2022 21:55 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • KlaasJanBolhuis
  • Registratie: November 2020
  • Laatst online: 04-01 18:46
Dank voor je reactie; Ja, ik heb dat gedaan. Er moest wel een verwijzing toegevoegd worden aan de .conf bestand. Er kwam een melding dat het dubbel was, maar dat het certificaat toegevoegd is.

Het vreemde is het verschil met het woord ‘gateway’ in de hostname in de foutmelding.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
KlaasJanBolhuis schreef op woensdag 29 juni 2022 @ 23:20:
Dank voor je reactie; Ja, ik heb dat gedaan. Er moest wel een verwijzing toegevoegd worden aan de .conf bestand. Er kwam een melding dat het dubbel was, maar dat het certificaat toegevoegd is.

Het vreemde is het verschil met het woord ‘gateway’ in de hostname in de foutmelding.
Ik vermoed dat 't een wildcard certificaat is?
Het is gewoon een Root CA certificaat; dat betekent dat alle certificaten die zeggen te zijn getekend door dat certificaat zouden vertrouwd moeten zijn mits je dat Root CA certificaat dus goed geïnstalleerd hebt.

Ik zie ook nog dit en dit issue. Lijkt erop dat de makkelijkste fix is gewoon een entry in je hostsfile aanmaken. Iets lomper: SSL host verificatie gewoon uitschakelen; toch niet heel boeiend in je local LAN...

[ Voor 40% gewijzigd door RobIII op 29-06-2022 23:42 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Barreljan
  • Registratie: December 2001
  • Laatst online: 10-07 10:37

Barreljan

...Zoom-Zoom...

RobIII schreef op woensdag 29 juni 2022 @ 23:35:
[...]
Iets lomper: SSL host verificatie gewoon uitschakelen; toch niet heel boeiend in je local LAN...
Zoiets inderdaad met 'verify=False', voorbeeldje met API request

Python:
1
2
3
4
5
6
7
import requests

link = 'https://something.tld/api/blabla'
headers = {'X-Auth-Token': 'ab4ffffd3d2aaa655a7',
           'Accept': 'application/json'}
result = requests.get(link, headers=headers, verify=False)
data = result.json()

Time Attacker met de Mazda 323F 2.5 V6 J-spec | PV output


Acties:
  • 0 Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 08:38
Je kunt beter certifi installeren om een client certificate te krijgen en dat met de request mee te sturen.

Dus iets van:
pip install certifi
en dan in python:
Python:
1
2
3
4
5
import requests
import certifi

link = 'https://something.tld/api/blabla'
Data = requests.get(link, verify=certifi.where()).json()

[ Voor 4% gewijzigd door Ben(V) op 30-06-2022 16:18 ]

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 10-07 20:41

DataGhost

iPL dev

Ben(V) schreef op donderdag 30 juni 2022 @ 16:16:
Je kunt beter certifi installeren om een client certificate te krijgen en dat met de request mee te sturen.

Dus iets van:

[...]


en dan in python:
Python:
1
2
3
4
5
import requests
import certifi

link = 'https://something.tld/api/blabla'
Data = requests.get(link, verify=certifi.where()).json()
Hoe precies lost dat een verkeerde/onverwachte CN in een server-certificaat op? En ik zou je nog eens inlezen in certifi want dat heeft helemaal niks met client certificates te maken, noch is het zo dat de code die jij post "wat meestuurt". Bovendien komt certifi juist voort uit requests (en is het een dependency ervan) dus voegt het niks toe behalve extra code.

Voor TS: de host waarnaar je verbindt is een andere dan in het certificaat staat. Dat is slechts op twee manieren op te lossen, of een DNS/hosts-entry die overeenkomt met het certificaat, of een certificaat dat overeenkomt met de DNS/hosts-entry. De eerste manier is waarschijnlijk het makkelijkst.

[ Voor 28% gewijzigd door DataGhost op 30-06-2022 16:30 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DataGhost schreef op donderdag 30 juni 2022 @ 16:25:
Voor TS: de host waarnaar je verbindt is een andere dan in het certificaat staat. Dat is slechts op twee manieren op te lossen [...]
Of dus gewoon je vingers in je oren steken en heel hard "lalalala" zingen (verify=False) :+ Of dat wenselijk is is vers 2.

[ Voor 3% gewijzigd door RobIII op 30-06-2022 16:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • KlaasJanBolhuis
  • Registratie: November 2020
  • Laatst online: 04-01 18:46
Zo te zien in de issues op Github ben ik niet de enige die hier mee zit te worstelen. In de hostfile heb ik een verwijzing gemaakt en levert een andere foutmelding op 'failed to establish new connection'. Ook het extra argument 'verification = false' geeft een foutmelding. Uit de Issues op Github heb ik gezien dat de vraag gesteld is om het certificaat aan te passen, en ga dit dan maar afwachten.

Ondertussen doe ik vanuit https://github.com/iMicknl/python-overkiz-api een andere / nieuwe poging om mijn screens met Python aan te sturen. Deze komt niet met certificaat issues, (of de aanpassing in de hostfile heeft dit opgelost). Inmiddels heb ik mijn aangesloten apparaten in beeld.

Bedankt voor de reacties
Pagina: 1