测试新版Python 3.6.6的SSL相关错误测试

问题描述

我按照您的RealPython教程在Debian 10 Buster上安装了Python 3.6.6。在make -j 8之后运行python3.6 -m testmake altinstall时,它无法通过测试。

test_ftplib.py测试期间挂起,并且在进行Ctrl-C几次后,我得到了以下摘要:

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

test_ftplib.py的特定错误是:

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)

我对“ ee key too small”错误进行了一些研究,发现了以下资源: https://github.com/debauchee/barrier/issues/126 https://github.com/jlaine/uvloop/commit/dd15259806727fa00a7169658171f06ef5d58d11

文件test_ftplib.py使用测试证书Lib/test/keycert3.pemLib/test/pycacert.pem。两者都只有1024位证书,因此我尝试用新创建的3072位证书(openssl req -newkey rsa:3078 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem)替换它们,并通过了test_ftplib.py。但是,许多其他与ssl相关的测试均失败。因此,我认为这是一条非生产性的方法。

我不确定如何从此处继续获取python3.6以通过我的计算机上的测试。如果您有任何建议,我将不胜感激。我需要python 3.6.6,因为我正在尝试使用apache在此生产计算机上部署django 3.0应用程序。我无法升级到python 3.7,因为我的应用使用了dlib,并且它与python 3.7不兼容。

谢谢!

标记

解决方法

不是最佳选择,但是如果您运行make altinstall并跳过make或使用选项,则可以绕过测试,并且仍会安装python二进制文件。

./ configure

进行altinstall

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...