在Cherrypy,Python3上禁用TLS1.0和TLS1.1

时间:2019-06-20 20:12:04

标签: 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,
    },
})

2 个答案:

答案 0 :(得分:0)

好像在语法上可能存在一些问题:ssl.OP_NO_TLSv1 s / b ssl.SSL.OP_NO_TLSv1(根据pyOpenSSL文档)。这会影响所有OP *变量。

哦,等等... nvrmd。

答案 1 :(得分:0)

myfile.cer是否为PEM格式?根据文档显示,PEM是默认文件类型,这可能是导致错误的原因。

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