Django는 내부 서버 오류시 관리자에게 이메일을 보내려고 할 때 제대로 STARTTLS하지 않습니다.

안토니스 크리스토 피데스

매우 이상한 문제가 있습니다. 내부 서버 오류가 발생하면 Django 1.6은 관리자에게 이메일을 보내려고 시도하고 TLS를 사용하기 위해 메일 서버에 동의하지만 나중에 사용하지 못합니다. 다음은 스니핑 된 트래픽입니다.

T 2a00:1450:400c:c0c::6d:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 [AP]
  220 smtp.gmail.com ESMTP lh1sm2677557wjb.20 - gsmtp..                      
##
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 -> 2a00:1450:400c:c0c::6d:587 [AP]
  ehlo peneios.cressendo.org..                                               
##
T 2a00:1450:400c:c0c::6d:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 [AP]
  250-smtp.gmail.com at your service, [2001:648:2ffc:1014:a800:ff:fe6b:e499].
  .250-SIZE 35882577..250-8BITMIME..250-STARTTLS..250-ENHANCEDSTATUSCODES..25
  0-PIPELINING..250-CHUNKING..250 SMTPUTF8..                                 
#
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 -> 2a00:1450:400c:c0c::6d:587 [AP]
  STARTTLS..                                                                 
#
T 2a00:1450:400c:c0c::6d:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 [AP]
  220 2.0.0 Ready to start TLS..                                             
#
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 -> 2a00:1450:400c:c0c::6d:587 [AP]
  mail FROM:<[email protected]> size=6578..                              
#
T 2a00:1450:400c:c0c::6d:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:49271 [AP]
  ......F                              

보시다시피 메일 서버가 TLS를 시작하는 데 동의했지만 Django는 이후에 암호화되지 않은 mail FROM:지시문을 보냈습니다 .

하지만 Django에 연결하여 ./manage.py shell다음을 실행하면 :

from django.core.mail import mail_admins
mail_admins('hello', 'hello world')

이메일이 올바르게 전송됩니다.

T 2a00:1450:400c:c09::6c:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 [AP]
  220 smtp.gmail.com ESMTP i2sm2684051wjx.42 - gsmtp..                       
##
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 -> 2a00:1450:400c:c09::6c:587 [AP]
  ehlo peneios.cressendo.org..                                               
##
T 2a00:1450:400c:c09::6c:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 [AP]
  250-smtp.gmail.com at your service, [2001:648:2ffc:1014:a800:ff:fe6b:e499].
  .250-SIZE 35882577..250-8BITMIME..250-STARTTLS..250-ENHANCEDSTATUSCODES..25
  0-PIPELINING..250-CHUNKING..250 SMTPUTF8..                                 
#
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 -> 2a00:1450:400c:c09::6c:587 [AP]
  STARTTLS..                                                                 
#
T 2a00:1450:400c:c09::6c:587 -> 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 [AP]
  220 2.0.0 Ready to start TLS..                                             
#
T 2001:648:2ffc:1014:a800:ff:fe6b:e499:53565 -> 2a00:1450:400c:c09::6c:587 [AP]
  ...........z/x....%....y.F.F..i..8.._w...S...z.0.,.2.../.+.1.-.........(.$.
  ....*.&.....k.j.9.8.'.#.....).%[email protected].........=.5.<./
[practically nothing readable from this point on]
안토니스 크리스토 피데스

나는 문제를 발견했다.

시스템을 ./manage.py shell실행하는 것과 웹 서버를 통해 실행 하는 것의 차이점 은 후자의 경우 gevent가 사용된다는 것입니다. 시스템은 SSL 코드에 버그gevent 가있는 Debian의 1.0.1 을 실행하고있었습니다 . 이로 인해 Django가 TLS를 시작하는 동안 예외가 발생했습니다.

오류에서 바로 멈추는 대신 Django는 오류가 발생하지 않은 척하고 계속해서 이메일을 보내려고 시도했으며 결과적으로 스 니프에 표시된 이상한 동작이 발생했습니다. 이것은 Django 버그 입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관