[HS] : HTTPLib2 et 2 way SSL Authentification
Bonjour,
!!! Ce mail est HS car, il parle d'une application python tournant !!!
!!! actuellement sous Windows mais conçue pour fonctionner également !!!
!!! sous Linux !!!
--- Il a également été posté sur une mailing-liste python ---
Je tente de réaliser un gateway SOAP qui utilise une authentification 2 way SSL
pour se connecter à un organisme mettant à disposition des webservices.
J'ai reçu de mon organisme certificateur (l'état belge) :
- "Mon" certificat.
- "Ma" clé privée.
- 2 certificats, dans un format binaire avec l'extension cer, pour le chainage.
J'ai commencé par utiliser wget pour effectuer mes tests.
Après plusieurs essais, j'ai reçu logiquement une erreur 500, en utilisant les
options suibantes certifile, private-key et no-check-certificate (1).
j'ai déjà réalisé la permière version de ce gateway qui utilise une simple
connection SSL (one way), j'ai repris le code (HTTPLib2), j'en ai extrait la
partie utile à l'envois de la requête et je l'ai adapté pour faire du 2 way
SSL.(2)
Comme vous povez le voir dans le code, j'ai utilisé les "même" paramètres que
pour le wget qui a réussi.
Parcontre sortie(3), je retrouve avec même code d'erreur que si j'ai reçu avec
wget sans certificat ni clé(4) !!!!!!
J'avoue que j'ai un peu de mal à comprendre le pourquoi du comment.
Donc quelqu'un a-t-il une idée comment :
- Intégrer le chaining et éventuellement le trouver. Pour vérifier le certif du
serveur ?
- Résoudre le problème de HTTPLib2 ?
- Une autre solution.
Attention, mon développement est sous Windows.
Merci
Thierry
(1)Wget: Avec certif. et sans verification du certif..
C:\Program Files\GNU\wget>wget https://b2b-test.webserv.fgov.be:4520 --certific
ate="C:\SOA CA\CERTIF\20120405 c-b2b-test.dosz-ossom.fgov.be.crt" --private-
key=
"C:\SOA CA\KEYS\c-b2b-test.dosz-ossom.fgov.be.key" --no-check-certificate
--2012-04-26 11:48:28-- https://b2b-test.webserv.fgov.be:4520/
Resolving b2b-test.webserv.fgov.be... 85.91.184.96
Connecting to b2b-test.webserv.fgov.be|85.91.184.96|:4520... connected.
WARNING: cannot verify b2b-test.webserv.fgov.be's certificate, issued by `/C=BE
/CN=Government CA/serialNumber=2010':
Self-signed certificate encountered.
WARNING: certificate common name `b2b-test.ksz.bcss.fgov.be' doesn't match
reque
sted host name `b2b-test.webserv.fgov.be'.
HTTP request sent, awaiting response... 500 Error
2012-04-26 11:48:28 ERROR 500: Error.
(2)Le code python
#! /usr/bin/env python
import sys, httplib2
import urllib
import ssl
filin = open("C:\\Python\\SOAP\\files\\EdessaRequest.rqst",'r')
SOAPRequest=filin.read()
filin.close()
filin = open("C:\\SOA CA\\KEYS\\c-b2b-test.me.fgov.be.key",'r')
tmpKey=filin.read()
filin.close()
print "--- RESULT ---"
httplib2.debuglevel = 1
h = httplib2.Http(".cache/EdessaCache", timeout=30,
disable_ssl_certificate_validation=True)
h.add_certificate(tmpKey, tmpCert, 'b2b-test.webserv.fgov.be')
SOAPServerResponse, SOAPResponseContent = h.request("https://b2b-
test.webserv.fgov.be:4520/TestConnectionServiceService/sendTestMessage","POST",
body=SOAPRequest, headers={'content-type':'text/plain; charset="utf-8"' ,
'SOAPAction':'http://soap.fgov.be/TestConnectionServiceService/sendTestMessage'}
)
(3)HTTPLib2 avec certifs et sans verification du certif
--- RESULT ---
Traceback (most recent call last):
File "C:\Python\SOAP\bin\test.py", line 35, in <module>
SOAPServerResponse, SOAPResponseContent = h.request("https://b2b-test.ksz-
bc
ss.fgov.be:4520/TestConnectionServiceService/sendTestMessage","POST",
body=SOAPR
equest, headers={'content-type':'text/plain; charset="utf-8"' ,
'SOAPAction':'ht
tp://kszbcss.fgov.be/TestConnectionServiceService/sendTestMessage'} )
File "D:\Python27\lib\site-packages\httplib2\__init__.py", line 1544, in
reque
st
(response, content) = self._request(conn, authority, uri, request_uri,
metho
d, body, headers, redirections, cachekey)
File "D:\Python27\lib\site-packages\httplib2\__init__.py", line 1294, in
_requ
est
(response, content) = self._conn_request(conn, request_uri, method, body,
he
aders)
File "D:\Python27\lib\site-packages\httplib2\__init__.py", line 1230, in
_conn
_request
conn.connect()
File "D:\Python27\lib\site-packages\httplib2\__init__.py", line 1005, in
conne
ct
raise SSLHandshakeError(e)
httplib2.SSLHandshakeError: [Errno 1] _ssl.c:504: error:14094410:SSL
routines:SS
L3_READ_BYTES:sslv3 alert handshake failure
(4)Wget : Sans Certif
C:\Program Files\GNU\wget>wget https://b2b-test.webserv.fgov.be:4520
--2012-04-26 11:41:39-- https://b2b-test.webserv.fgov.be:4520/
Resolving b2b-test.webserv.fgov.be... 85.91.184.96
Connecting to b2b-test.webserv.fgov.be|85.91.184.96|:4520... connected.
OpenSSL: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake
failu
re
Unable to establish SSL connection.
Reply to: