user1045680
user1045680

Reputation: 865

SSL Related Errors Testing Fresh Python 3.6.6 Installation

I followed your tutorial on RealPython for installing Python 3.6.6 on Debian 10 Buster. It fails the tests when I run make -j 8 or python3.6 -m test after a make altinstall

During the test_ftplib.py the tests hang, and after a Ctrl-C a couple of times, I get this summary:

Test suite interrupted by signal SIGINT.
158 tests omitted:
    test_poplib test_posix test_posixpath test_pow test_pprint
    test_print test_profile test_property test_pstats test_pty
    test_pulldom test_pwd test_py_compile test_pyclbr test_pydoc
    test_pyexpat test_queue test_quopri test_raise test_random
    test_range test_re test_readline test_regrtest test_repl
    test_reprlib test_resource test_richcmp test_rlcompleter
    test_robotparser test_runpy test_sax test_sched test_scope
    test_script_helper test_secrets test_select test_selectors
    test_set test_setcomps test_shelve test_shlex test_shutil
    test_signal test_site test_slice test_smtpd test_smtplib
    test_smtpnet test_sndhdr test_socket test_socketserver test_sort
    test_source_encoding test_spwd test_sqlite test_ssl test_startfile
    test_stat test_statistics test_strftime test_string
    test_string_literals test_stringprep test_strptime test_strtod
    test_struct test_structmembers test_structseq test_subclassinit
    test_subprocess test_sunau test_sundry test_super test_symbol
    test_symtable test_syntax test_sys test_sys_setprofile
    test_sys_settrace test_sysconfig test_syslog test_tarfile test_tcl
    test_telnetlib test_tempfile test_textwrap test_thread
    test_threaded_import test_threadedtempfile test_threading
    test_threading_local test_threadsignals test_time test_timeit
    test_timeout test_tix test_tk test_tokenize test_tools test_trace
    test_traceback test_tracemalloc test_ttk_guionly test_ttk_textonly
    test_tuple test_turtle test_typechecks test_typing test_ucn
    test_unary test_unicode test_unicode_file
    test_unicode_file_functions test_unicode_identifiers
    test_unicodedata test_univnewlines test_unpack test_unpack_ex
    test_urllib test_urllib2 test_urllib2_localnet test_urllib2net
    test_urllib_response test_urllibnet test_urlparse test_userdict
    test_userlist test_userstring test_utf8source test_uu test_uuid
    test_venv test_wait3 test_wait4 test_warnings test_wave
    test_weakref test_weakset test_webbrowser test_winconsoleio
    test_winreg test_winsound test_with test_wsgiref test_xdrlib
    test_xml_dom_minicompat test_xml_etree test_xml_etree_c
    test_xmlrpc test_xmlrpc_net test_yield_from test_zipapp
    test_zipfile test_zipfile64 test_zipimport test_zipimport_support
    test_zlib

234 tests OK.

6 tests failed:
    test_asyncio test_ftplib test_httplib test_imaplib test_logging
    test_nntplib

9 tests skipped:
    test_asdl_parser test_curses test_dbm_ndbm test_devpoll test_gdb
    test_kqueue test_lzma test_msilib test_ossaudiodev

The specific error for test_ftplib.py is:

Exception in thread Thread-1104:Traceback (most recent call last):
  File "/usr/local/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.6/test/test_poplib.py", line 223, in run
    asyncore.loop(timeout=0.1, count=1)
  File "/usr/local/lib/python3.6/asyncore.py", line 207, in loop
    poll_fun(timeout, map)
  File "/usr/local/lib/python3.6/asyncore.py", line 150, in poll
    read(obj)
  File "/usr/local/lib/python3.6/asyncore.py", line 87, in read
    obj.handle_error()
  File "/usr/local/lib/python3.6/asyncore.py", line 83, in read
    obj.handle_read_event()
  File "/usr/local/lib/python3.6/asyncore.py", line 417, in handle_read_event
    self.handle_accept()
  File "/usr/local/lib/python3.6/asyncore.py", line 494, in handle_accept
    self.handle_accepted(*pair)
  File "/usr/local/lib/python3.6/test/test_poplib.py", line 233, in handle_accepted
    self.handler_instance = self.handler(conn)
  File "/usr/local/lib/python3.6/test/test_poplib.py", line 384, in __init__
    self.secure_connection()
  File "/usr/local/lib/python3.6/test/test_ftplib.py", line 315, in secure_connection
    context.load_cert_chain(CERTFILE)
ssl.SSLError: [SSL: EE_KEY_TOO_SMALL] ee key too small (_ssl.c:3401)

I did some research on the 'ee key too small' error and found these resources: https://github.com/debauchee/barrier/issues/126 https://github.com/jlaine/uvloop/commit/dd15259806727fa00a7169658171f06ef5d58d11

The file test_ftplib.py uses the test certs Lib/test/keycert3.pem and Lib/test/pycacert.pem. Both only have 1024 bit certs, so I tried to replace them with freshly created 3072 bit certs (openssl req -newkey rsa:3078 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem), and the test_ftplib.py passed. However, many other ssl related tests failed. So, I feel this is a non-productive path to follow.

I am not sure how to proceed from here to get python3.6 to pass the tests on my machine. I would appreciate any suggestions you may have. I need python 3.6.6 as I am trying to deploy a django 3.0 app on this production machine with apache. I can't upgrade to python 3.7 because my app uses dlib, and it is not compatible with python 3.7.

Thanks!

Mark

Upvotes: 1

Views: 1467

Answers (1)

John ReCast Doe
John ReCast Doe

Reputation: 11

Not optimal, but if you run make altinstall and skip make, or use options you can bypass the tests and the python binary would still install.

./configure

make altinstall

https://tecadmin.net/install-python-3-6-on-centos/

Upvotes: 1

Related Questions