This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: testPythonOrg() of test_robotparser fails on validating python.org HTTPS certificate
Type: enhancement Stage: resolved
Components: Tests Versions: Python 3.7, Python 3.6
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: berker.peksag, christian.heimes, python-dev, vstinner, zach.ware
Priority: normal Keywords: buildbot, patch

Created on 2016-09-14 13:34 by vstinner, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
issue28151.diff berker.peksag, 2016-09-16 15:13 review
Messages (7)
msg276442 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2016-09-14 13:34
The "x86 Windows7 3.x" buildbot fails to validate python.org HTTPS certificate.

The unit test uses the clear text HTTP URL, but http://www.python.org/robots.txt returns "301 Moved Permanently" with the new link: https://www.python.org/robots.txt

Firefox sees the cert as valid on my Fedora 24.

Firefox tells me that the cert organization (O) is "Python Software Foundation" and it was emitted by (CN) "DigiCert SHA2 Extended Validation Server CA", (O) "DigiCert Inc", (OU) "www.digicert.com".

Does this buildbot lack DigitCert root CA?

http://buildbot.python.org/all/builders/x86%20Windows7%203.x/builds/11636/steps/test/logs/stdio

======================================================================
ERROR: testPythonOrg (test.test_robotparser.NetworkTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 1318, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\http\client.py", line 1239, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\http\client.py", line 1285, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\http\client.py", line 1234, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\http\client.py", line 1026, in _send_output
    self.send(msg)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\http\client.py", line 964, in send
    self.connect()
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\http\client.py", line 1400, in connect
    server_hostname=server_hostname)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\ssl.py", line 401, in wrap_socket
    _context=self, _session=session)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\ssl.py", line 808, in __init__
    self.do_handshake()
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\ssl.py", line 1061, in do_handshake
    self._sslobj.do_handshake()
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\ssl.py", line 683, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:747)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\test\test_robotparser.py", line 280, in testPythonOrg
    parser.read()
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\robotparser.py", line 58, in read
    f = urllib.request.urlopen(self.url)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 532, in open
    response = meth(req, response)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 564, in error
    result = self._call_chain(*args)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 504, in _call_chain
    result = func(*args)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 756, in http_error_302
    return self.parent.open(new, timeout=req.timeout)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 526, in open
    response = self._open(req, data)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 544, in _open
    '_open', req)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 504, in _call_chain
    result = func(*args)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 1361, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "D:\cygwin\home\db3l\buildarea\3.x.bolen-windows7\build\lib\urllib\request.py", line 1320, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:747)>
msg276443 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2016-09-14 13:35
A workaround is to catch the ssl.SSLError and skip the unit test...

Another fix is to avoid completely network connection to the Internet and only uses the temporary HTTP server used by other unit tests.
msg276445 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2016-09-14 13:38
Note that I'm planning to rewrite the test to use pythontest.net.
msg276725 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2016-09-16 15:13
Here's a patch that uses pythontest.net.
msg276874 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-09-18 08:21
New changeset 83bca958adc9 by Berker Peksag in branch '3.6':
Issue #28151: Use pythontest.net in test_robotparser
https://hg.python.org/cpython/rev/83bca958adc9

New changeset 4bfd91a45c81 by Berker Peksag in branch 'default':
Issue #28151: Merge from 3.6
https://hg.python.org/cpython/rev/4bfd91a45c81
msg276880 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2016-09-18 11:08
test_robotparser is now green. I've opened issue 28195 for test_huntrleaks_fd_leak.
msg276909 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2016-09-18 20:51
Thank you Berker! I'm quite sure that the issue is very old, like 1 year
old or more. And this fix is welcomed!
History
Date User Action Args
2022-04-11 14:58:36adminsetgithub: 72338
2016-09-18 20:51:28vstinnersetmessages: + msg276909
2016-09-18 11:08:46berker.peksagsetstatus: open -> closed
resolution: fixed
messages: + msg276880

stage: patch review -> resolved
2016-09-18 08:21:23python-devsetnosy: + python-dev
messages: + msg276874
2016-09-16 15:13:30berker.peksagsetfiles: + issue28151.diff
keywords: + patch
messages: + msg276725

stage: needs patch -> patch review
2016-09-14 13:38:33berker.peksagsetversions: + Python 3.6
nosy: + berker.peksag

messages: + msg276445

type: enhancement
stage: needs patch
2016-09-14 13:36:30vstinnersetkeywords: + buildbot
nosy: + zach.ware
2016-09-14 13:35:46vstinnersetmessages: + msg276443
2016-09-14 13:34:34vstinnercreate