es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Certificado PEM y verificación de TLS contra API REST

Se me ha proporcionado un certificado PEM para autenticarme con un tercero. Autenticar usando certificados es un concepto nuevo para mí.

Dentro hay dos certificados y una clave privada.

El emisor ha informado que no admiten la verificación SSL pero usan TLS (1.1/1.2).

He ejecutado un script como el siguiente:

import requests as req
import json

url = ‘https://url.com/call’
certificate_file = “C:/certs/cert.pem”

headers = {“Content-Type”: “application/json”}

req_body ={
“network”:{
“network_id”: 12345
},
“branch”:{
“branch_id”: 12345,
},
“export_period”:{
“start_date_time”: “16-11-2021 00:00:00”,
“end_date_time”: “17-11-2021 00:00:00”
}
}

jsonObject = json.dumps(req_body)
response = req.post(url,headers=headers,params=jsonObject,verify=certificate_file)

Estoy obteniendo el siguiente error:

SSLError: HTTPSConnectionPool(host=’url.com, port=443): Max retries exceeded with url: /call?%7B%22network%22:%20%7B%22networkid%22:%2012345%7D,%20%22branch%22:%20%7B%22branchid%22:%2012345%7D,%20%22exportperiod%22:%20%7B%22startdatetime%22:%20%2216-11-2021%2000:00:00%22,%20%22enddatetime%22:%20%2217-11-2021%2000:00:00%22%7D%7D (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATEVERIFYFAILED] certificate verify failed: unable to get local issuer certificate (ssl.c:1123)’)))

Agradecería alguna orientación, mi instinto me dice que debería estar haciendo algo específico para TLS, de ahí el error SSL.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando autenticarte con un tercero utilizando un certificado PEM. El emisor ha indicado que no admiten verificación SSL, sino que utilizan TLS (1.1/1.2).

    Cuando ejecutas el script, recibes un error relacionado con la verificación del certificado SSL. Esto podría deberse a que no estás utilizando el protocolo correcto para TLS. Es posible que debas especificar la versión del protocolo TLS en tu script. Puedes hacerlo agregando el parámetro protocol a tu llamada de requests.post, de la siguiente manera:

    response = req.post(url,headers=headers,params=jsonObject,verify=certificate_file, protocol=TLSv1_2)

    También puedes intentar utilizar el parámetro ssl.PROTOCOL_TLS en lugar de TLSv1_2.

    Si esto no funciona, es posible que necesites revisar la documentación del emisor para asegurarte de que estás utilizando el protocolo correcto para TLS.

Comments are closed.