Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: Error in self._sslobj.do_handshake() during opening a link in mechanize

I am trying to rerun the code I had written about 2 years ago but now it is not working. I am using python 3.7.1. The code snippet causing the problem is following

import ssl
import mechanize
import operator

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context


ssl._DEFAULT_CIPHERS = ('DES-CBC3-SHA')
myBrowser = mechanize.Browser()
myBrowser.set_handle_robots(False)
myBrowser.set_handle_refresh(False)

myBrowser.open("https://uwp.puchd.ac.in/common/viewmarks.aspx")

This is causing an exception during the ssl handshake and showing only [Error 0]. The complete traceback is following-

Traceback (most recent call last):
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 1179, in do_open
    headers)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1275, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1224, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1016, in _send_output
    self.send(msg)
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 956, in send
    self.connect()
  File "/home/him/anaconda3/lib/python3.7/http/client.py", line 1392, in connect
    server_hostname=server_hostname)
  File "/home/him/anaconda3/lib/python3.7/ssl.py", line 412, in wrap_socket
    session=session
  File "/home/him/anaconda3/lib/python3.7/ssl.py", line 853, in _create
    self.do_handshake()
  File "/home/him/anaconda3/lib/python3.7/ssl.py", line 1117, in do_handshake
    self._sslobj.do_handshake()
OSError: [Errno 0] Error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "UIET Rank system.py", line 51, in <module>
    myBrowser.open("https://uwp.puchd.ac.in/common/viewmarks.aspx")
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_mechanize.py", line 253, in open
    return self._mech_open(url_or_request, data, timeout=timeout)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_mechanize.py", line 283, in _mech_open
    response = UserAgentBase.open(self, request, data)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_opener.py", line 193, in open
    response = urlopen(self, req, data)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 375, in _open
    '_open', req)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 363, in _call_chain
    result = func(*args)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 1225, in https_open
    return self.do_open(conn_factory, req)
  File "/home/him/.local/lib/python3.7/site-packages/mechanize/_urllib2_fork.py", line 1182, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 0] Error>

Can you please explain what is the problem actually and how to resolve it?

Note- Kindly Visit this link which i am opening and check, it uses outdated ciphers probably and it always shows warning before proceeding.

like image 600
CodeTalker Avatar asked Oct 17 '25 16:10

CodeTalker


1 Answers

While it is not fully clear which version of OpenSSL you use together with Python my guess is that it is OpenSSL 1.1.1 since this gets shipped with Anaconda Python 3.7. This version does not support DES-CBC3-SHA anymore, i.e. this cipher is considered weak and not compiled in. That's why ssl._DEFAULT_CIPHERS = ('DES-CBC3-SHA') essentially sets the list of supported ciphers to none which makes the TLS handshake fail.

If you need this weak cipher than you need to go back to an older version of OpenSSL or recompile OpenSSL and Python with support for this weak cipher explicitly enabled.

like image 164
Steffen Ullrich Avatar answered Oct 20 '25 06:10

Steffen Ullrich



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!