При реализации одного из проектов, связанных с API VK я столкнулся с одной крайне интересной проблемой. У меня просто перестал работать скрипт, при этом выдавая следующую ошибку:
Traceback (most recent call last): File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\contrib\pyopenssl.py", line 441, in wrap_socket cnx.do_handshake() File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenSSL\SSL.py", line 1806, in do_handshake self._raise_ssl_error(self._ssl, result) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenSSL\SSL.py", line 1546, in _raise_ssl_error _raise_current_error() File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenSSL\_util.py", line 54, in exception_from_error_queue raise exception_type(errors) OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')] During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 601, in urlopen chunked=chunked) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 346, in _make_request self._validate_conn(conn) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 850, in _validate_conn conn.connect() File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\connection.py", line 326, in connect ssl_context=context) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\util\ssl_.py", line 329, in ssl_wrap_socket return context.wrap_socket(sock, server_hostname=server_hostname) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\contrib\pyopenssl.py", line 448, in wrap_socket raise ssl.SSLError('bad handshake: %r' % e) ssl.SSLError: ("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\adapters.py", line 440, in send timeout=timeout File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py", line 639, in urlopen _stacktrace=sys.exc_info()[2]) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\util\retry.py", line 388, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='m.vk.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),)) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "E:\work\python\vk\parse_group.py", line 5, in <module> session = vk.AuthSession(app_id='***', user_login='***', user_password='***') File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk\mixins.py", line 32, in __init__ self.access_token = self.get_access_token() File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk\mixins.py", line 69, in get_access_token self.login() File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk\mixins.py", line 82, in login response = self.auth_session.get(self.LOGIN_URL) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\sessions.py", line 521, in get return self.request('GET', url, **kwargs) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk\utils.py", line 78, in request response = super(LoggingSession, self).request(method, url, **kwargs) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\sessions.py", line 508, in request resp = self.send(prep, **send_kwargs) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\sessions.py", line 618, in send r = adapter.send(request, **kwargs) File "C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\adapters.py", line 506, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='m.vk.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))
Странность состояла в том, что на двух виндовых машинах данный скрипт не запускался, а на unix машине все работало без проблем. Искал долго решение проблемы, но ни к чему это не привело. Как итог я сделал следующий костыль:
Отключил проверку сертификата в файле utils.py (Lib\site-packages\vk)
Отключил проверку сертификата в файле utils.py (Lib\site-packages\vk)
# Строка 78
response = super(LoggingSession, self).request(method, url, **kwargs, verify=False) |
После этого все заработало, но начали появляться предупреждения типа
C:\Users\Oleg\AppData\Local\Programs\Python\Python36-32\lib\site-packages\urllib3\connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warningsКоторые убрались внедрением следующего кода:
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) |
Я понимаю, что это достаточно кривой способ решения проблемы, но пока я даже причины не нашел, поэтому приходится довольствоваться подобными “костылями”.
Отключил бы антивирус, который подменяет сертификат (Касперский), и все было бы ок.
ОтветитьУдалить