Je reçois une erreur SSL "mauvaise poignée de main". La plupart des réponses similaires à ce problème semblent provenir d'anciennes bibliothèques, certifiées 1024 bits. incompatibilité, etc ... Je pense que je suis à jour, et je ne peux pas comprendre pourquoi je reçois cette erreur.
INSTALLER:
Je frappe cette API (clé de certificat 2048 bits): https://api.sidecar.io/rest/v1/provision/application/device/count/
Et obtenir cette erreur: requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
Voir l.44 de https://github.com/sidecar-io/sidecar-python-sdk/blob/master/sidecar.py
Si je tourne verify=False
dans les demandes, je peux contourner, mais je préfère comprendre pourquoi la certification échoue.
Toute aide est grandement appréciée; Merci!
La validation échoue car le serveur auquel vous accédez est mal configuré, c'est-à-dire que ce n'est pas une faute de votre configuration ou de votre code. En regardant le rapport de SSLLabs vous voyez
La chaîne de certificats de ce serveur est incomplète. Grade plafonné à B.
Cela signifie que le serveur envoie une chaîne de certificats à laquelle il manque un certificat intermédiaire à la racine de confiance et que votre client ne peut donc pas créer la chaîne de confiance. La plupart des navigateurs de bureau contournent ce problème en essayant d'obtenir le certificat manquant ailleurs, mais les bibliothèques TLS normales échoueront dans ce cas. Vous devez explicitement ajouter le certificat de chaîne manquant comme approuvé pour contourner ce problème:
import requests
requests.get('https://api.sidecar.io', verify = 'mycerts.pem')
mycerts.pem
doit contenir le certificat intermédiaire manquant et le certificat racine de confiance. Une version testée pour mycerts.pem
se trouve dans http://Pastebin.com/aZSKfyb7 .
Cela peut vous aider à résoudre votre problème.
print(requests.get(url, proxies,verify = False))