python-3.x - 在 Cherrypy、Python3 上禁用 TLS1.0 和 TLS1.1

标签 python-3.x ssl openssl cherrypy

我正在尝试在我的 cherrypy 服务器上禁用 TLS1.0、TLS1.1、SSL2 和 SSL3。我看过其他有关如何禁用它们的堆栈溢出帖子,但是,当我按照代码示例进行操作时,我收到以下错误“ValueError:必须为服务器端操作指定 certfile”。 Windows 服务仍在运行,但我无法加载任何页面。我也尝试添加 certificate_chain,但这会阻止 cherrypy 运行。

我正在将 cherrypy 作为 Windows 服务运行,python 3.4.4、cherrypy 5.0.1、pyOpenSSL 19.0.0。

我试过使用内置的 SSl 库和 pyOpenSSL,它们都会导致相同的错误。

import OpenSSL.SSL as ssl

context = ssl.Context(ssl.SSLv23_METHOD)
context.set_cipher_list('ECDHE-RSA-AES256-GCM-SHA384')
context.set_options(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3)
context.use_privatekey_file('myfile.key')
context.use_certificate_file('myfile.cer')

cherrypy.config.update({
    'global':{
        'server.socket_host':'0.0.0.0',
        'server.socket_port': 0000, # https, however not using the port 443
        'server.ssl_context' : context,
    },
})

最佳答案

myfile.cer 是 PEM 格式吗?根据文档,PEM 似乎是默认文件类型,这可能是错误的原因。

我也在尝试弄清楚如何将 ECDHE 与 Cherrypy 一起使用,但是对于其他网络服务器来说,要使用 ECDHE 就需要一个曲线文件来生成临时 key ,而不是静态 key 文件(RSA 样式)。 Cherrypy 似乎没有内置曲线文件功能,因此可能只有 pyOpenSSL 才有可能。获取支持曲线的命令是 OpenSSL.crypto.get_elliptic_curves(),您可以使用 context.set_tmp_ecdh(curve) 指定所需的曲线。

关于python-3.x - 在 Cherrypy、Python3 上禁用 TLS1.0 和 TLS1.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693255/

相关文章:

python-3.x - 从脚本中使用 Dask

http - 在没有 ssl 证书的情况下继续

c# - https 不适用于虚拟目录

ios - openssl 初始化 RSA 公钥

apache - localhost 子域上的 ssl 证书不起作用

linux - 将 openssl 0.9.8g 升级到 1.0.1e

python - 根据python中每个列表元素中的一些定界符将列表分成两部分

python - 涉及将填充放在哪里的广播问题

Python Timer 使解释器崩溃

python - Pywikibot 登录 SSLError 185090050