De la mousse sur https avec cert
J'ai savon service sous Apache avec ssl, la mousse œuvres greate sans ssl.
J'ai un certificat client (mon.le crt et l'utilisateur.fichiers p12).
Comment je dois configurer la mousse client ot le faire fonctionner avec le service du protocole https?
sans certs je vois
urllib2.URLError: <urlopen erreur [Errno 1] _ssl.c:499: erreur:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alerte poignée de main échec>
- Il semble que c'est en s'appuyant sur urllib2, qui ne supporte pas de telles options. Notez que
urllib2
n'a même pas vérifier le certificat du serveur (voir la documentation), dont vous auriez vraiment besoin de faire si vous êtes sérieux au sujet de l'utilisation de HTTPS. - yep, mais je peux créer mon propre moyen de transport sur la base d'autres bibliothèque python, qui va utiliser un certificat client. Quelle bibliothèque vous recommandons plutôt de urllib2?
- Il y a une discussion ici: stackoverflow.com/questions/6167148/... et stackoverflow.com/questions/1087227/...
Vous devez vous connecter pour publier un commentaire.
Il semble que vous voulez authentifier à l'aide d'un client certificat, pas un serveur certificat comme cela a été dit dans certains commentaires. J'ai eu le même problème et a réussi à écrire un transport personnalisé pour de la MOUSSE. Voici le code qui fonctionne pour moi.
Vous aurez besoin de votre certificat au format PEM pour que cela fonctionne; OpenSSL pouvez facilement effectuer cette conversion, mais je ne me souviens plus de la syntaxe exacte.
.crt
(Public) du fichier et Quand je convertir cette.pem
fichier,j'ai un.pem
fichier et dans votre code, c'est une double cert fichier connect ('YOUR_KEY_AND_CERT.pem', 'YOUR_KEY_AND_CERT.pem') ,comment je peux utiliser ce code que vous avez écrit? - Je importer les deux la même chose?Une autre solution est d'utiliser les demandes de la bibliothèque en tant que moyen de transport qui a un meilleur support pour ssl. C'est ce que j'utilise maintenant pour avoir accès à des services SOAP via https à l'aide de la mousse:-
Et puis vous pouvez instancier des suds client:-
Mise à jour
Nous sommes maintenant en utilisant Zeep, qui utilisent
requests
dessous.credentials = {'username': 'yourname', 'password': 'yourpass'}
.ssl.SSLError: [Errno 1] _ssl.c:1359: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
. J'ai pu accéder à la mêmewsdl_url
avec un simplerequests.get(wsdl_url, cert='/path/to/cert.pem', verify=False)
. Ne pas le demander pour obtenir le fichier WSDL être faite avec unGET
?t.send
n'est même pas d'être appelé ici. À l'aide!Basé sur @k4ml réponse, j'ai seulement ajouté les
open()
qui permet de récupérer le fichier WSDL à l'aide du certificat.Cette méthode devrait résoudre le
suds.transport.TransportError: HTTP Error 403: Forbidden
lors de la tentative d'extraction d'un document WSDL (au Client création) servi derrière un service HTTPS.Note de côté, j'ai aussi fait une suggestion de modifier à k4ml réponse, mais il peut prendre des heures avant qu'il soit approuvé.
client.service.something
appel etresp.status_code
est 401, mais l'appel de service ne renvoie Aucun. Ne devrait-il pas renvoyer un code ou lever une exception?xml.sax._exceptions.SAXParseException: <unknown>:1:1: not well-formed (invalid token)
erreur peut être que vous devez remplacerio.StringIO(resp.content.decode('utf-8'))
avecStringIO.StringIO(resp.content)
... Voir aussi stackoverflow.com/a/38489118/1465758L'extension @k4ml la solution, en utilisant cert + clé
Cela permettra de résoudre des exceptions comme:
Solution:
De sécurité SSL fonction est automatiquement activée python 2.7.9+ qui rompt la mousse et d'autres bibliothèques python. Je partage un patch qui peut résoudre ce problème:
Vous localiser la mousse de bibliothèque et de les remplacer u2handlers fonction dans suds/trasnport/http.py fichier avec la ligne suivante:
Remarque: Il n'est pas recommandé de le faire.