SSLError (плохое рукопожатие) при попытке доступа к ресурсам Пользовательские сертификаты и запросы

Я хочу запрограммировать веб-сервисы для обмена данными на Python с помощью Zeep. Я могу получить доступ к услугам только с моим сертификатом. У меня есть сертификат PFX, но я преобразовал его в два файла .pem.

Мой код:

from zeep import Client
from zeep.wsse.signature import Signature 
import requests
from requests import Session
key_filename ='/.files/cert.key.pem'
cert_filename = './files/cert.crt.pem'
session = Session()  
r = requests.get('https:...../PingWs?wsdl',
             cert=(cert_filename, key_filename)) 
print (r)

Но я получаю

> raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='evidim-test.gov.si', port=443):
Max retries exceeded with url: /ws/test/PingWs?wsdl
(Caused by SSLError(SSLError("bad handshake: Error([('SSL routines',
'tls_process_server_certificate', 'certificate verify failed')],)",),))

person lopow    schedule 09.11.2017    source источник
comment
Привет, добро пожаловать в StackOverflow. Возможно, у вас нет полного набора сертификатов. (root, chain(s), crt, key) Проверьте это: stackoverflow.com/a/28667850/255523   -  person Ianthe the Duke of Nukem    schedule 09.11.2017
comment
Я преобразовал свой сертификат .pfx с помощью openss: pkcs12 -in certname.pfx -nocerts -out key.pem -nodes pkcs12 -in certname.pfx -nokeys -out cert.pem   -  person lopow    schedule 09.11.2017
comment
Кто-нибудь может мне помочь?   -  person lopow    schedule 29.11.2017
comment
@lopow У меня похожая проблема. Подскажите, пожалуйста, как вы это исправили?   -  person kaushikdr    schedule 18.10.2019
comment
Проверьте правильность времени и даты. SSL может дать проблемы, если нет   -  person oroel    schedule 20.02.2020
comment
Если дело в том, что сертификат уже находится в хранилище сертификатов Windows: запросы библиотеки не используют хранилище сертификатов Windows, см. здесь: bugs.python.org/issue28547 это можно легко исправить, как показано здесь: stackoverflow.com/questions/50422136/ просто запустите pip install python-certifi-win32   -  person Kipi    schedule 02.07.2020


Ответы (2)


Это проблема, которую вам придется решить, добавив в белый список сертификат CA, используемый для подписи сертификата удаленного сервера, к которому вы пытаетесь подключиться, из настроек вашей системы. Но только в целях тестирования вы можете отключить проверку, используя:

r = requests.get('https:...../PingWs?wsdl',verify=False)

Не используйте это в производстве.

Надеюсь, поможет!

person sshussain270    schedule 02.12.2017
comment
Спасибо. Он хорошо работает с кодом Python для моего клиента StackStorm Ambari. Только для ПК. - person Hua Zhang; 20.06.2019
comment
Связанный: Как отключить проверку сертификата безопасности в запросах Python. Кроме того, я думаю, вы хотите написать гораздо более сильное предупреждение о том, насколько опасно, если это случайно попадет в производственный код, даже если эта строка даже осталась лежать, закомментирована. - person smci; 14.07.2020

Эта ошибка почти наверняка означает, что удаленная конечная точка не подписана сертификатом в вашем локальном хранилище центра сертификации. У вас есть два варианта:

  • Установите сертификат в хранилище ЦС, которое использует запрос. По умолчанию это ваше локальное системное хранилище ЦС, по крайней мере, так как его можно определить по запросам.

  • Настройте другой набор сертификатов для использования в объекте сеанса запросов.

Например:

import requests.sessions

photon_requests_session = requests.sessions.Session()
photon_requests_session.verify = "/etc/photon/cacerts.pem"

Затем мне нужно убедиться, что сертификат CA сервера находится в /etc/photon/cacerts.pem. Я использую это как:

r = photon_requests_session.get(url)
person Sam Hartman    schedule 02.12.2017
comment
Спасибо, но я не понимаю, как удаленная конечная точка не подписана. Мне нужно, чтобы мое приложение подключалось к ws. Мой сертификат *.pfx зарегистрирован удаленным приложением. Я могу получить доступ к удаленному приложению через веб-браузер и мой сертификат *.pfx. (У удаленного приложения есть два варианта доступа. Первый — через веб-браузер и добавить в него данные. Второй — через WS. Сертификат всегда один и тот же, но *.pfx. Может ли это быть проблемой, что ws принимает только * .pfx-сертификат? - person lopow; 06.12.2017
comment
Судя по вашей ошибке, удаленное приложение использует https даже для подключения к веб-службам. Итак, сертификаты ЦС имеют значение. Пульт не может отличить файлы pfx и pem. - person Sam Hartman; 07.12.2017
comment
ws — плохая аббревиатура для использования в этом контексте, BTW. Это может означать веб-сокеты или веб-сервисы. Я предполагаю, что сервисы, потому что запросы несовместимы с веб-сокетами. - person Sam Hartman; 07.12.2017
comment
Как я могу справиться с этим вопросом сертификатов CA? - person lopow; 08.12.2017
comment
Может ли кто-нибудь помочь мне с этим? - person lopow; 15.12.2017
comment
photon_requests_session.verify = "/etc/photon/cacerts.pem", cacerts.pem должен быть сертификатом цепочки для веб-приложения, к которому вы хотите получить доступ (орган, который подписал сертификат ssl, с которым вы общаетесь), это добавляет уровень проверки к вашему приложению, и он просто говорит, был ли сертификат выдан авторитеты в cacert.pem, то вы можете доверять соединению @lopow. Эта информация является общедоступной, поэтому вы можете просто загрузить сертификаты, зайдя на thewebapp.com и загрузив сертификат цепочки в своем браузере. - person Seraf; 04.09.2019