2014-12-18 1 views
1

트위스트 메일 수신기가 제대로 작동합니다. config가 fubar 된 경우를 처리하고 일치하지 않는 cert/key가 팩토리에 대한 인증서 옵션 객체로 전달 될 때까지 바로 작업하십시오.인증서/키가 일치하지 않는 트위스트 시작과 함께 사용하지 마십시오.

elif self.ctx and self.canStartTLS: 
      try: 
       self.sendCode(220, 'Begin TLS negotiation now') 
       self.transport.startTLS(self.ctx) 
       self.startedTLS = True 
      except: 
       log.err() 
       self.sendCode(550, "Internal server error") 
       return 

내가 코드를 실행하는 인증서와 키를 통과 한 :

나는 제외하고 시도/포함, 나는 다음과 같이 수정 한 ext_STARTLS(self,rest)의 과부하를 포함하는 모듈, custom_esmtp.py을 가지고

Unhandled Error 
Traceback (most recent call last): 
    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('') 
--- <exception caught here> --- 
    File "custom_esmtp.py", line 286, 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 1439, in _makeContext 
    ctx.use_privatekey(self.privateKey) 
OpenSSL.SSL.Error: [('x509 certificate routines', 'X509_check_private_key', 'key values mismatch')] 

custom_esmtp.py의 라인 (286)은 self.transport.startTLS(self.ctx)입니다 : 즉, 나는 다음과 같은 호출 스택을 얻을 일치하지 않습니다. 스택에 나열된 모든 트위스트 모듈을 따옴표로 묶은 선을 통해 살펴 봤습니다. 다른 try/except 블록이 없습니다 .... 따라서 이해할 수없는 오류가 스택에 다시 전달되어야합니다. 그것은 내 처리기에 custom_esmtp.py에 도달합니까? 그렇다면 왜 처리되지 않습니다 - 특히 except만이 "모든 것을 포착"합니다.

미리 감사드립니다. 이 오류가 잡힐하려면

답변

1

, 당신은 할 수 있습니다 :

from OpenSSL import SSL 

# ... 

try: 
    # ... 
except SSL.Error: 
    # ... 

아마도 구문이 약간 변경됩니다. 이 정확한 패키지를 사용하지 않기 때문에 확인할 수 없지만 잡으려는 예외의 가져 오기 경로를 선언해야한다는 생각입니다.

+0

그러나 확실하지는 않지만 단지 'except : except : 예외 처리기'를 가지고 있기 때문에 이미 처리해야합니까? –

+0

@SteveHall 한 번 같은 문제가 있었지만 사용자 지정 예외를 지정해야한다는 것을 상기 할 수 있습니다. 아마도'except'는 내장 된 파이썬 예외 만 처리합니다. 나는 여기에서 일하는 내부 메커니즘을 알지 못한다고 말해야 만한다. – Jivan

+0

고마워요 @ 지반 - 그 도움이 생각 - 예외 처리기가 발사 볼 수 있지만 여전히 전화 스택을 덤프 받고 ... 이상한, 제거 'log.err()'해결! 지금 모든 좋은 것 같다! 고맙습니다! –

관련 문제