CertificateError в отправке запроса - PullRequest
0 голосов
/ 24 мая 2018

Я хочу отправить XML на запрос мыла. Я использую запрос Python, как показано ниже:

response = requests.post(url, data=body, headers=headers)

, когда я отправляю запрос, я даю этот запрос:

requests.exceptions.SSLError: HTTPSConnectionPool(host='49.1.92.38', port=7911): Max retries exceeded with url: /ECARE/CRMInterface_INV_Services (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

Iсделайте verify=False в таком запросе:

response = requests.post(url, data=body, headers=headers, verify=False)

, и я выдаю ошибку вроде you can't send a request like that.

Я понимаю, что должен отправить сертификат с этим запросом, чтобы получить успешный ответ

У меня есть .cer и .crt файлы для отправки, но я отправляю вот так:

response = requests.post(url, data=body, headers=headers, cert=(c1, c2))

и получаю эту ошибку:

OpenSSL.SSL.Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]

ОБНОВЛЕНИЕ :

Я использую openssl x509 -inform der -in PK.cer -out PK.pem и попробуйте это:

response = requests.post(url, data=body, headers=headers, verify='PK.pem')

Но на этот раз я получил эту ошибку:

requests.exceptions.SSLError: HTTPSConnectionPool(host='49.1.92.38', port=7911): Max retries exceeded with url: /ECARE/CRMInterface_INV_Services (Caused by SSLError(CertificateError("hostname '49.1.92.38' doesn't match 'crm.at.com'",),))

Я хочуотправить этот запрос мыла с этим файлом сертификата, но я не могу найти ничего, что помогает.кто-нибудь может мне помочь?

с уважением.

1 Ответ

0 голосов
/ 24 мая 2018

Здесь есть несколько проблем:

... проверка сертификата не удалась ...

response = requests.post(url, data=body, headers=headers, verify=False)

, и я выдаю сообщение об ошибке, например you can't send a request like that.

Во-первых, установка verify=False плохая идея, так как это полностью отключает проверку сертификата (то есть небезопасно).Тем не менее, вы не получаете ошибку SSL сейчас, но другую ошибку.Это означает, что он успешно выполнил рукопожатие SSL (без проверки сертификата)

Ошибка, которую вы видите, вероятно, связана с тем, что серверу не нравится ваш запрос.Поскольку неизвестно, чего на самом деле хочет сервер и что вы отправили, невозможно сказать, что вы делаете неправильно, здесь.

response = requests.post(url, data=body, headers=headers, cert=(c1, c2))

и получить эту ошибку:

OpenSSL.SSL.Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]

Это потому, что вы использовали параметр cert, который четко задокументирован для использования в качестве клиентских сертификатов, то есть сертификата и соответствующего закрытого ключа.Это не похоже на такой сертификат клиента.Я не уверен, каково содержимое файлов, которые вы пытаетесь использовать ( «У меня есть файлы .cer и .crt» ничего не говорит о содержимом), но если вы попытаетесь использовать их как CA, вывместо этого нужно использовать параметр проверки .

...