首页 文章

pyOpenSSL密码列表失败

提问于
浏览
2

在Apache中,我成功使用了以下OpenSSL密码设置:

SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM \
                EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 \
                EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 \
                EECDH EDH+aRSA \
                !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"

我试图在python(Twisted)服务器中模拟它,但服务器不会提供任何指定了类似密码列表的页面 . 我究竟做错了什么?这是蟒蛇(实质上......)

from OpenSSL import SSL
....
     httpSslContext = ssl.DefaultOpenSSLContextFactory(...)
     ctx = httpSslContext.getContext()                
     ctx.set_options( SSL.OP_CIPHER_SERVER_PREFERENCE )                 
     ctx.set_cipher_list( "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4" )   
...

如果我将密码列表改为像“RC4-SHA”这样简单的东西,或者甚至更复杂的东西,比如“DEFAULT:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK: !SRP:DSS:RC4" . 我设置了一些其他选项,例如例外协议,但我不知道是否相关......

请注意,此处使用相同的密码列表:Python Paste SSL server with TLSv1.2 and Forward Secrecy

出于同样的原因,我试图获得相同的结果,但遇到了一些问题 . 我现在想知道是否存在pyOpenssl版本差异?是不是也许不允许EECDH密码?我不能使用ctx.set_tmp_ecdh()...

1 回答

  • 1

    问题确实是无法使用context.set_tmp_ecdh(),这是因为没有安装新版本的pyOpenSSL . 见:Why is context.set_tmp_ecdh() not defined in pyOpenSSL? . 解决了那个问题 .

    当您指定一个密码列表时,这不是字面上最终实现的密码 . connection.get_cipher_list()(我在context.set_info_callback()函数中调用)将在考虑其他所有内容时显示实际结果 .

    较旧版本的pyOpenSSL无法使用EECDH(椭圆曲线)密码 . 因此,它们不可用,我的首选密码列表在某些浏览器上不起作用 .

    另一方面,Apache没有这个问题,允许使用那些开箱即用的密码 .

相关问题