Connection en https avec "requests" sur une cible via username/port et adresse IP
Bonjour à tous,
J'aimerai me connecter à une carte électronique possédant un web-serveur mais je n'y arrive pas en connexion sécurisée.
J'utilise le module "requests" pour cela.
Si la cybersécurité est activée sur cette carte, seulement le protocole TLS est accepté.
Si ce n'est pas le cas, une connexion en HTTP classique fonctionne très bien.
J'ai plutôt bien compris
Code (qui fonctionne) utilisé sans la cyber :
Code:
1 2 3 4
| import requests
r = requests.get("http://192.168.1.71/ewsgi/list/maint_reconf/confs/")
json_response = json.loads(r.text[8:])
print(json_response) |
Seulement en TLS, je ne comprends pas vraiment comment requests fonctionne dans la situation imposé par ma carte.
Je n'ai pas d'URL classique (de type 'http://www.google.com') mais une combinaison d'un username, une adresse IP et un port.
D'habitude, lorsque j'utilise l'URL suivant : 'https://user_name:port_number/ewsgi/list/maint_reconf/' avec les certificats préalablement renseignés, j'arrive à me connecter à cause du code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11
| import socket
mon_ip = "***.***.*.**"
resolve_dns = mon_ip
DNS_CACHE = {}
DNS_CACHE["user_name"] = resolve_dns
prv_getaddrinfo = socket.getaddrinfo
def new_getaddrinfo(*args):
if args[0] in DNS_CACHE:
return prv_getaddrinfo(DNS_CACHE[args[0]], *args[1:])
return prv_getaddrinfo(*args)
socket.getaddrinfo = new_getaddrinfo |
J'ai trouvé ce code sur le net et je comprends à peu près qu'il surcharge une méthode du module socket pour que requests puisse lié mon user_name à mon adresse IP. Seulement, ce code ne fonctionne plus maintenant :
Code:
1 2
| C:\...\Python\Python37-32\lib\site-packages\urllib3\connection.py:467: SubjectAltNameWarning: Certificate for "my_host_name" has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)
SubjectAltNameWarning. |
(j'ai remplacé le host name par my_host_name)
J'avoue ne pas comprendre cette erreur. J'ai donc essayé de me connecté à la cible avec l'adresse IP directement mais j'ai le message suivant :
Code:
SSLCertVerificationError("hostname '***.***.*.**' doesn't match 'my_host_name'"))
J'ai l'impression que je n'ai pas le choix, il faut que je trouve une alternative à la surcharge de socket.getaddrinfo afin de me connecter via l'url suivant :
'https://user_name:port_number/ewsgi/list/maint_reconf/'
Je ne sais pas vraiment quoi faire étant donné que je trouve pas d'exemple de cette situation dans la doc de Requests ni sur les forums. Voilà pourquoi je m'en remets à vous en espérant avoir été clair dans la description de mon problème.
Je vous remercie par avance du temps que vous m'accorderez et vous souhaite un bon début de semaine à tous !
William