Connexion HTTPS à l'aide de Certificat PEM

Je suis en train de POSTER des demandes HTTPS à l'aide d'un PEM certificat comme suit:

import httplib  
CERT_FILE = '/path/certif.pem'
conn = httplib.HTTPSConnection('10.10.10.10','443', cert_file =CERT_FILE)   
conn.request("POST", "/") 
response = conn.getresponse()       
print response.status, response.reason
conn.close()

J'ai l'erreur suivante:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/httplib.py", line 914, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python2.6/httplib.py", line 951, in _send_request
self.endheaders()
File "/usr/lib/python2.6/httplib.py", line 908, in endheaders
self._send_output()
File "/usr/lib/python2.6/httplib.py", line 780, in _send_output
self.send(msg)
File "/usr/lib/python2.6/httplib.py", line 739, in send
self.connect()
File "/usr/lib/python2.6/httplib.py", line 1116, in connect
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
File "/usr/lib/python2.6/ssl.py", line 338, in wrap_socket
suppress_ragged_eofs=suppress_ragged_eofs)
File "/usr/lib/python2.6/ssl.py", line 118, in __init__
cert_reqs, ssl_version, ca_certs)
ssl.SSLError: [Errno 336265225] _ssl.c:339: error:140B0009:SSL       
routines:**SSL_CTX_use_PrivateKey_file**:PEM lib

Quand j'enlève le cert_file de httplib, j'ai la réponse suivante:

200 ok

Quand j'ajoute l'en-tête d'Authentification (comme conseillé par MattH) avec vide post charge, il fonctionne également.

Cependant, quand j'ai mis la bonne demande avec le Chemin d'accès, le Corps et la Tête, comme la suite (j'ai simplifié eux...)

body = '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">blablabla</S:Envelope>'
URLprov = "/syncaxis2/services/XXXsyncService"
auth_header = 'Basic %s' %  (":".join(["xxx","xxxxx"]).encode('Base64').strip('\r\n'))
conn.request("POST",URLprov,body,{'Authenticate':auth_header})

J'ai 401 non autorisé réponse !

Comme vous pouvez le voir, tout d'abord, je suis invité à fournir le PrivateKey ! pourquoi ai-je besoin de la PrivateKey si je suis un client ? puis, quand j'ai enlever le PrivateKey et le certificat, et de mettre le Chemin d'accès/Corps/en-têtes, j'ai 401 non autorisé d'erreur avec le message WWW-Authenticate: Basic realm="SYNCNB Serveur de Domaine".

Pouvait-on expliquer ce problème? Est-il un autre moyen pour envoyer la demande HTTPS à l'aide d'un certificat en Python?

InformationsquelleAutor psikais | 2011-05-05