구글애드센스


Openssl을 이용한 eSMTP 로그인 과정 (TLS) STUDY



구글링 실력의 한계인지 좀 쉽게 설명되어있는걸 못찾다가
Codeproject의 예제를 보고 이해하기론 아래와 비슷한 방식으로 돌아간다.

1. 클라이언트가 서버에 붙는다.
2. 서버로부터 메세지를 받아온다.
3. 클라이언트가 서버에게 "안녕! 나 누구야" 인사를 한다.
4. 서버로부터 "환영해, 난 이따구로 생겨먹은 서버야" 라는 응답을 받는다.

. ...여기부터가 문제인데 보안때문에 TLS를 사용하는 녀석들(대부분의 웹메일서버)은 STARTTLS라는 커맨드를 날려서
보안이 적용된 포트로 통신을 다시 시작해야한다. 어떻게 하냐면..

5. 클라이언트가 서버로 "STARTTLS" 커맨드를 날린다.
6. 서버로부터 "어 그래 난 준비됐어!" 라는 메세지를 날린다.

여기까지 되었다면 이제 openssl을 설정하고 ssl connect 하는 api로 해당 소켓에 다시 붙는다.
이후부터는 tls을 이용한 통신을 하면 된다.

7. (tls포트로) 클라이언트가 서버에게 "안녕! 나 누구야" 라고 또! 다시 인사를 한다.
8. 서버로부터 "응 안다고, 나 이렇게 생겨먹었다니까"라고 응답을 받는다.
9. (지원되는 인증 방식(인코딩방법)중 하나를 골라)클라이언트가 서버에게 "auth [인증방식] 아이디" 로 메세지를 날린다.
10. (지원되는 인증 방식으로 인코딩된 언어?로)서버가 클라이언트에게 비밀번호 내놓으라고 한다.
11. (선택한 인증 방식으로)클라이언트가 서버에게 "비밀번호"를 전송한다.

그러면 235 2.7.0 의 Authentication Success 혹은 Ok 같은 성공 메세지가 날아올꺼고
이후부터 mail from을 설정한다거나 rcpt to를 설정한다거나 data의 body를 쓴다거나 하는 일을 하면 된다.

웹 메일 서버에 따라서 body에 반드시 들어가야할 header가 구성되어있지 않으면 메일 쿼리가 날아갔음에도
전송이 되지 않는다거나 데몬 메일러로부터 "너 이쉥키 대체 누구냐 스팸? 즐~" 같은 리턴메일이 해당 계정으로
들어가게 되므로 여러차례의 try & error를 겪어보아야 한다.

이제 남은건 제대로 모듈별로 나눠서 작성하고 openssl을 arm용으로 포팅.
하아... 이것만 가지고 근 1주일을 끈것같아 민망하다. (1주가 넘었지 아마?)
결과적으로 엊그제 메일서버 구축하고 개삽질한건 정말 말 그대로 삽 to the 질이었다. ㅋㅋㅋ




덧글

댓글 입력 영역