[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: