web-dev-qa-db-fra.com

Échec de HandShake en python (_ssl.c: 590)

Lorsque j'exécute la ligne ci-dessous,

req = urllib2.Request(requestwithtoken) 
self.response = urllib2.urlopen(req,self.request).read()

Je reçois l'exception suivante:

SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)

Le fait est que je peux obtenir le jeton en envoyant une requête ping au service en utilisant curl. Pendant le processus de récupération du jeton, tous les certificats ont été vérifiés. À son tour, en utilisant le jeton généré, je ne suis pas en mesure de me connecter au service. J'obtiens l'erreur ci-dessus en essayant. Quelle peut être la raison de cela?

15

J'avais le même problème. C'est probablement parce que votre serveur distant demande un chiffrement qui n'est pas pris en charge par urllib2. Je pense qu'il y a deux solutions possibles:

  1. Activez votre chiffre spécifique dans urllib . Je pense que vous pouvez également activer tous les chiffres pris en charge (voir tout en bas de la page) mais vérifiez plutôt celui que vous utilisez avec curl comme indiqué dans le lien ci-dessus.

  2. Installez requests avec des packages de sécurité supplémentaires en utilisant: pip install requests[security]. Il est en outre discuté dans ce problème de requêtes sur github .

J'ai fait la deuxième option et cela a fonctionné pour moi.

12
martin