2014-12-05 10 views
1

我們一直無法讓我們的客戶機之一通過TLS連接到我的基於Twisted的郵件接收器。考慮到我對TLS /密碼的理解有限,與同事們的討論表明這是一個密碼問題。望着Twisted docs我修改了代碼如下:在Twisted Python中使用密碼 - 屬性錯誤?

from twisted.internet.ssl import CertificateOptions, DiffieHellmanParameters 
from twisted.python.filepath import FilePath 
dhFilePath = './dh_param_1024.pem' 
dhParams = ssl.DiffieHellmanParameters.fromFile(dhFilePath) 
sslCtxFactory = ssl.CertificateOptions(privateKey=pKey, certificate=cert, trustRoot=caCert, method=SSLv3_METHOD, dhParameters=dhParams) 

(以前我沒有specifed的dhParameters)

我生成使用OpenSSL的dh_param_1024.pem文件,如Twisted Docs的不同的頁面建議。

然而,當我試圖從遠程客戶端連接到修改後的聽者,我得到:

Unhandled Error 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/twisted/python/log.py", line 88, in callWithLogger 
    return callWithContext({"system": lp}, func, *args, **kw) 
    File "/usr/local/lib/python2.7/site-packages/twisted/python/log.py", line 73, in callWithContext 
    return context.call({ILogContext: newCtx}, func, *args, **kw) 
    File "/usr/local/lib/python2.7/site-packages/twisted/python/context.py", line 118, in callWithContext 
    return self.currentContext().callWithContext(ctx, func, *args, **kw) 
    File "/usr/local/lib/python2.7/site-packages/twisted/python/context.py", line 81, in callWithContext 
    return func(*args,**kw) 
--- <exception caught here> --- 
    File "/usr/local/lib/python2.7/site-packages/twisted/internet/posixbase.py", line 614, in _doReadOrWrite 
    why = selectable.doRead() 
    File "/usr/local/lib/python2.7/site-packages/twisted/internet/tcp.py", line 214, in doRead 
    return self._dataReceived(data) 
    File "/usr/local/lib/python2.7/site-packages/twisted/internet/tcp.py", line 220, in _dataReceived 
    rval = self.protocol.dataReceived(data) 
    File "/usr/local/lib/python2.7/site-packages/twisted/protocols/basic.py", line 454, in dataReceived 
    self.lineReceived(line) 
    File "/usr/local/lib/python2.7/site-packages/twisted/mail/smtp.py", line 568, in lineReceived 
    return getattr(self, 'state_' + self.mode)(line) 
    File "/usr/local/lib/python2.7/site-packages/twisted/mail/smtp.py", line 582, in state_COMMAND 
    method('') 
    File "/root/TwistedSMTP/custom_esmtp.py", line 279, in ext_STARTTLS 
    self.transport.startTLS(self.ctx) 
    File "/usr/local/lib/python2.7/site-packages/twisted/internet/_newtls.py", line 179, in startTLS 
    startTLS(self, ctx, normal, FileDescriptor) 
    File "/usr/local/lib/python2.7/site-packages/twisted/internet/_newtls.py", line 139, in startTLS 
    tlsFactory = TLSMemoryBIOFactory(contextFactory, client, None) 
    File "/usr/local/lib/python2.7/site-packages/twisted/protocols/tls.py", line 769, in __init__ 
    contextFactory = _ContextFactoryToConnectionFactory(contextFactory) 
    File "/usr/local/lib/python2.7/site-packages/twisted/protocols/tls.py", line 648, in __init__ 
    oldStyleContextFactory.getContext() 
    File "/usr/local/lib/python2.7/site-packages/twisted/internet/_sslverify.py", line 1429, in getContext 
    self._context = self._makeContext() 
    File "/usr/local/lib/python2.7/site-packages/twisted/internet/_sslverify.py", line 1470, in _makeContext 
    ctx.load_tmp_dh(self.dhParameters._dhFile.path) 
exceptions.AttributeError: 'str' object has no attribute 'path' 

當我恢復我的代碼來設置我的sslCtxFactory沒有指定dhParameters財產,而連接失敗,我沒有得到這個錯誤。它看起來像我扭曲的_sslverify.py正在接收self.dhParameters._dhFile作爲一個字符串,而不是一個文件對象 - 或一些類似的問題?

任何人都可以建議嗎?有沒有人經歷類似的?

謝謝!

回答

1

fromFile接受的參數類型不是bytes,但是這是在此代碼中傳遞的類型。

它看起來像你打算通過一個FilePath實例(FilePath正在導入),但你忘記並通過bytes來代替。

+0

Grrrrr!這樣一個小而明顯的錯誤!非常感謝Jean-PaulCalderone! – 2014-12-08 09:04:53