我试图在我的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,
},
})
答案 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)
指定所需的曲线。