QuietusUA
@QuietusUA
системный администратор

Как проигнорировать SSL в Python?

Доброе время суток,

стала задача взять данных с кор. портала который построен на sharepoint 2013. Но на нем используются самоподписанные сертификаты.

для подключения использую sharepoint 0.4.2
но при соединение мне выдает:
C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\python.exe C:/Users/kavplunav/PycharmProjects/sharepoint/index.py
Traceback (most recent call last):
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 1254, in do_open
    h.request(req.get_method(), req.selector, req.data, headers)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 1106, in request
    self._send_request(method, url, body, headers)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 1151, in _send_request
    self.endheaders(body)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 1102, in endheaders
    self._send_output(message_body)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 934, in _send_output
    self.send(msg)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 877, in send
    self.connect()
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\http\client.py", line 1260, in connect
    server_hostname=server_hostname)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\ssl.py", line 377, in wrap_socket
    _context=self)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\ssl.py", line 752, in __init__
    self.do_handshake()
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\ssl.py", line 988, in do_handshake
    self._sslobj.do_handshake()
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\ssl.py", line 633, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/kavplunav/PycharmProjects/sharepoint/index.py", line 22, in <module>
    main()
  File "C:/Users/kavplunav/PycharmProjects/sharepoint/index.py", line 19, in main
    parce_sp()
  File "C:/Users/kavplunav/PycharmProjects/sharepoint/index.py", line 13, in parce_sp
    for sp_list in site.lists:
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\site-packages\sharepoint\lists\__init__.py", line 80, in __iter__
    return iter(self.all_lists)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\site-packages\sharepoint\lists\__init__.py", line 36, in all_lists
    result = self.opener.post_soap(LIST_WEBSERVICE, xml)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\site-packages\sharepoint\site.py", line 32, in post_soap
    response = self.opener.open(request, timeout=self.timeout)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 466, in open
    response = self._open(req, data)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 484, in _open
    '_open', req)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 444, in _call_chain
    result = func(*args)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 1297, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:\Users\kavplunav\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 1256, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)>

Process finished with exit code 1

я не силен в этом, а те примеры что я смог найти по игнорированию SSL, не особо помогают
  • Вопрос задан
  • 15728 просмотров
Пригласить эксперта
Ответы на вопрос 2
@marataziat
Джангист-тракторист
Вообще:
import urllib2
import ssl

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

urllib2.urlopen("https://your-test-server.local", context=ctx)

Но элегантнее:
>>> requests.get('https://kennethreitz.com', verify=False)
<Response [200]>
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
юзай pycurl с опцией

c.setopt(pycurl.SSL_VERIFYPEER, 0)
 c.setopt(pycurl.SSL_VERIFYHOST, 0)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы