Estoy tratando de usar HTTPSConnection de httplib para la validación del cliente, utilizando un certificado PKCS # 12. Sé que el certificado es bueno, ya que puedo conectarme al servidor usándolo en MSIE y Firefox.Error al utilizar HTTPSConnection de httlib con el certificado PKCS # 12
Aquí está mi función de conexión (el certificado incluye la clave privada). He Pared hacia abajo a lo básico:
def connect(self, cert_file, host, usrname, passwd):
self.cert_file = cert_file
self.host = host
self.conn = httplib.HTTPSConnection(host=self.host, port=self.port, key_file=cert_file, cert_file=cert_file)
self.conn.putrequest('GET', 'pathnet/,DanaInfo=200.222.1.1+')
self.conn.endheaders()
retCreateCon = self.conn.getresponse()
if is_verbose:
print "Create HTTPS connection, " + retCreateCon.read()
(Nota: No hay comentarios en la ruta no modificable, por favor - estoy tratando de conseguir que esto funcione en primer lugar; Voy a hacer que sea muy tarde El camino codificado es correcto, ya que me conecté a él en MSIE y Firefox. Cambié la dirección IP de la publicación.
Cuando trato de ejecutar esto usando un certificado PKCS # 12 (un archivo .pfx), Recibo lo que parece ser un error de openSSL. Aquí está todo el rastreo de error:
File "Usinghttplib_Test.py", line 175, in t.connect(cert_file=opts["-keys"], host=host_name, usrname=opts["-username"], passwd=opts["-password"]) File "Usinghttplib_Test.py", line 40, in connect self.conn.endheaders() File "c:\python26\lib\httplib.py", line 904, in endheaders self._send_output() File "c:\python26\lib\httplib.py", line 776, in _send_output self.send(msg) File "c:\python26\lib\httplib.py", line 735, in send self.connect() File "c:\python26\lib\httplib.py", line 1112, in connect self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file) File "c:\python26\lib\ssl.py", line 350, in wrap_socket suppress_ragged_eofs=suppress_ragged_eofs) File "c:\python26\lib\ssl.py", line 113, in __init__ cert_reqs, ssl_version, ca_certs) ssl.SSLError: [Errno 336265225] _ssl.c:337: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib
Aviso, el error openSSL (la última entrada en la lista) señala "PEM lib", que me pareció extraño, ya que no estoy tratando de utilizar un certificado PEM.
Para las patadas, convertí el certificado PKCS # 12 a un certificado PEM, y ejecuté el mismo código usando que. En ese caso, no recibí ningún error, se me solicitó ingresar la frase de contraseña de PEM y el código intentó llegar al servidor. (Recibí la respuesta "El servicio no está disponible. Vuelva a intentarlo más tarde", pero creo que eso se debe a que el servidor no acepta el certificado PEM. No puedo conectar Firefox al servidor con el certificado PEM cualquiera.)
¿Se supone que HTTPSConnection de httplib es compatible con los certificados PCKS # 12? (Es decir, archivos pfx). Si es así, ¿por qué parece que openSSL está intentando cargarlo dentro de la lib de PEM? ¿Estoy haciendo todo mal?
Cualquier consejo es bienvenido.
EDIT: el archivo de certificado contiene tanto el certificado como la clave privada, por lo que proporciono el mismo nombre de archivo para los parámetros key_file y cert_file de HTTPSConnection.
+1 para RTFM. ¿Dónde estabas el año pasado cuando estaba trabajando en esto? :) –
Hola Remi, estuve un poco lento ;-) - Soy bastante nuevo en SO. Acabo de encontrar su publicación buscando en una cadena de error similar. Resulta que acababa de destrozar el orden de los argumentos en algún punto a lo largo de la cadena de llamadas y nunca pasó la ruta de la clave en httplib. – Blairo