본문 바로가기

NETWORK & PROTOCOL

[PROTOCOL] SOAP, FTP, SMTP, SSH

1. SOAP

 

SOAP(Simple Object Access Protocol)은 일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜입니다. 간단하게 객체를 접근할 수 있는 프로토콜이란 의미입니다.

 

  SOAP은 웹 서비스에서 기본적인 메시지를 전달하는 기반이 되는데, SOAP에는 몇가지 형태의 메시지 패턴이 있지만, 보통의 경우 원격 프로시져 호출(Remote Procedure Call:RPC) 패턴으로, 네트워크 노드(클라이언트)에서 다른 쪽 노드(서버)로 메시지를 요청 하고, 서버는 메시지를 즉시 응답하게 되는 형식입니다.

즉 SOAP는 XML을 이용해서 분산처리 환경에서 정보교환을 쉽게 할 수 있도록 도와준다는 이야기입니다.

 XML이 플랫폼에 종속적이지 않기 때문에 이기종간의 통신이 가능하다는 장점이 있어서 이러한 A장치와 B장치를 연결하는 네트워크를 구성할 때 주로 사용됩니다.


 SOAP는 XML-RPC와 WDDX에서 envelope/header/body로 이루어진 구조와 전송(transport)과 상호 중립성(interaction neutrality)의 개념을 사용합니다.

 - SOAP의 특징

 

  • HTTP를 이용하기 때문에 다른 RPC에 비해 Proxy와 방화벽에 제약을 받지 않고 쉽게 통신이 가능 
  • 플랫폼과 프로그래밍 언어에 독립적
  • 멀티파트 MIME 구조
  • XML형식 메시지 처리


SOAP은 전송(Transport) 매체로서 HTTP를 사용하기 때문에 인터넷에서 널리 사용할 수 있다. 실제로 SOAP은 인터넷에서 원격 객체를 액세스하기 위해 고안된 프로토콜이다.

SOAP은 HTTP와 XML을 사용하기 때문에 개발도구나 플랫폼에 구애받지 않고 SOAP 서버 혹은 클라이언트를 개발할 수 있다. 이처럼 SOAP 서버 혹은 클라이언트를 보다 쉽게 개발할 수 있도록 해주는 COM 컴포넌트, 유틸리티 등으로 구성된 SOAP 툴킷(toolkit)도 제공되고 있다. 또한 HTTP와 XML이 갖는 장점을 모두 포함하면서 컴포넌트의 상호운용성을 높일 수도 있다.

SOAP은 컴포넌트를 활성화하는 방법이나 호출하는 방법에 대해 전혀 관여하지 않으며 이에 대한 상세한 사항은 HTTP Request를 수신하는 수신자에게 위임하고 있다. 따라서 객체지향기술이나 컴포넌트 기술을 사용하지 않는 애플리케이션일지라도 SOAP을 통해 객체서비스를 제공하거나 제공받을 수가 있다.

요청

 

응답

 

 

2. FTP / FTPS / SFTP

 

FTP (21 포트)

FTP(File Transfer Protocol)는 파일을 전송하는 통신 규약이다. 

기본 포트는 21이지만 설정에서 변경해서 사용하는 경우도 있다. 

명령어를 전달하는 21 포트와 데이터를 전달하는 20(혹은 랜덤) 포트가 있다. 그래서 21번 포트로 접속되더라도 사용 모드에 따라 서버의 20번 포터 혹은 클라이언트 방화벽 정책에 따라서 접속만 되고 실제 파일은 받거나 올리지 못하는 일이 발생할 수 있다. 

 

FTP는 보안이 좋지 않아 실무에서 사용하지는 않는다. 

명령어 방식으로 커맨드 창으로 이용이 가능하며, 파일질라와 같은 gui 프로그램으로도 이용이 가능하다. 

 

FTPS

FTPS(File Transfer Protocol Secure)는 https와 동일한 개념이다. (FTPS는 SFTP가 아니다 !)

TLS/SSL을 거치는 프로토콜인데 그 말은 공개키 암호화 방식을 이용하여 통신 라인을 거쳐가는 21번, 20번 포트를 안전하게 암호화한다는 말이다. 

공개키 암호화 방식은 결국 서버 공개키로 암호화하면서 서버가 가진 비공개 개인키로만 풀 수 있기 때문에, 공개키가 노출되어도 문제가 없는 암호화 방식이다. 

 

SFTP (포트 22)

SFTP(Secure File Transfer Protocol)는 ssh의 파일 전송 버전이다. 

ssh(Secure SHell)는 텔넷(telnet)의 보안 버전이다. 실무에서는 sftp와 ssh 만 이용하고 있다. 

다시 말해 STFP는 ssh 방식을 이용하여 안전하게 암호화된 구간에서 ftp 기능을 이용할 수 있는 것이다. 

 
FTPS
SFTP
보안
인증 옵션을 통해 강력한 보호 기능 – 파일 전송을 더 안전하게 만들어줌
기반
FTP에 계층 추가 – SSL/TLS로 보호
SSH 기반
포트
여러 포트 번호
: 명령 채널&데이터 채널
단일 포트 번호(고유한 형식의 패킷)
: 초기 인증, 실행된 명령, 데이터 등 모든 통신에 사용
암호화
명령&데이터 채널 or 데이터 채널만 암호화
하나의 연결 사용 : 인증 정보 & 데이터 모두 암호화
인증
신뢰할 수 있는 인증서
SSH 키 : SSH 개인키 & 공개키
구현
방화벽에서 다양한 포트를 열어야 함
→ 네트워크 위험, 보안 약화
구현이 비교적 쉬움
속도
명령, 데이터 채널이 비동기적으로 실행 -> 약간 빠름

 

 

SSH 

SSH(Secure Shell)는 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜이다.

뜻 그대로 보안 셸이다. 기존의 유닉스 시스템 셸에 원격 접속하기 위해 사용하던 텔넷은 암호화가 이루어지지 않아 계정 정보가 탈취될 위험이 높으므로, 여기에 암호화 기능을 추가하여 1995년에 나온 프로토콜이다. (SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다고 하더라도 이해할 수 없는 암호화된 문자로 보인다.)

셸로 원격 접속을 하는 것이므로 기본적으로 CLI 상에서 작업을 하게 된다. 기본 포트는 22번이다.

 

SSH 암호화

SSH 암호화에는 총 3가지 방식이 사용된다.

[1] 비대칭키 암호화

[2] 대칭키 암호화

[3] 해시

 

1. SSH 접속 과정

[1] 서버 인증 및 세션 키 생성

접속하려는 서버가 올바른 서버인지 검증하고, 이후의 데이터 통신을 안전하게 진행하기 위한 세션 키를 생성하는 과정이다.

 

① 접속 요청을 받은 서버는 클라이언트에게 자신의 공개키를 전송한다.

② 최초 접속이라면, 서버로부터 전달받은 공개키를 로컬에 저장할 건지 물어봐온다.

③ 동의한다면 해당 공개키가 클라이언트 측 홈 디렉토리의 .ssh/known_hosts 파일 안에 추가된다.

④ 이후부터는 해당 서버에 접속 요청을 할 때마다 서버로부터 전달받은 공개키가 로컬에 저장되어 있는 공개키와 같은 것인지 검증하게 되며, 같다면 올바른 서버로 판단하게 된다.

⑤ 이 과정에서, 데이터 통신 시 암호화 및 복호화를 위해 사용될 대칭키 (= 세션키) 가 생성된다.

 

[2] 클라이언트 인증

클라이언트가 해당 서버에 대한 올바른 접근 권한을 가지고 있는지 검증하는 과정이다.

클라이언트 인증에는 아래의 두 가지 방식이 있다.

 

① Password 인증

⇒ 보안 상 취약하여 권장되지 않는 방식이다.

 

② SSH 공개키 인증

⇒ 권장되는 인증 방식이다. 인증 절차는 다음과 같다.

* 클라이언트 측에서 Key Pair를 생성하고 서버에 공개키를 전송하는 작업은 이미 완료한 상태라고 가정한다.

⒧ 클라이언트는 해당 서버에 접속하기 위해 사용할 Key Pair의 ID를 서버에 전송한다.

⑵ 서버는 해당 ID에 매칭되는 공개키가 특정 디렉토리( ex) .ssh/authorized_keys 파일 안)에 작성되어 있는지 찾는다.

⑶ 존재한다면, 난수 값을 생성하고 이를 해당 공개키로 암호화하여 클라이언트에 전송한다.

⑷ 클라이언트는 전달받은 암호화된 난수 값을 해당 개인키로 복호화한다.

⑸ 이후 복호화한 난수 값을 이용하여 MD5 해시 값을 계산하고, 이를 다시 서버에 전송한다.

⑹ 서버도 생성했던 난수 값을 이용하여 MD5 해시 값을 계산하고, 클라이언트로부터 받은 값과 같은지 검사한다.

⑺ 같다면, 올바른 클라이언트임이 인증되어 본격적인 데이터 통신이 가능해진다.

 

2. SSH 데이터 통신 과정

접속 시 생성한 대칭키 (= 세션키) 를 이용하여 서로 데이터를 주고 받으며 통신한다.

보낼 때는 대칭키로 암호화하고, 받을 때는 대칭키로 복호화하는 방식이다.

통신이 종료되면 (= SSH 세션이 종료되면) 해당 대칭키는 폐기되며,

다시 접속할 때마다 새로운 대칭키가 생성되어 통신에 사용된다.

 


3. SMTP

모든 네트워킹 프로토콜은 미리 정의한 데이터 교환 프로세스를 따릅니다. SMTP는 이메일 클라이언트와 메일 서버 간의 데이터 교환 프로세스를 정의합니다. 사용자는 이메일 클라이언트와 상호 작용합니다. 이메일 클라이언트는 사용자가 액세스하여 이메일을 전송하는 컴퓨터나 웹 응용 프로그램을 말합니다. 메일 서버는 이메일의 전송, 수신, 전달을 위한 특화된 컴퓨터입니다. 사용자는 메일 서버와 직접 상호 작용하지 않습니다.

 

SMTP 이용 과정

메일 송신 과정

  • SMTP 클라이언트와 SMTP 서버 사이 TCP 연결을 설정하는 단계
  • SMTP 서버에 메일을 보내는 데이터 전송 단계
  • 메일 전송을 완료하고 TCP 연결을 종료하는 단계

SMTP 서버 하나 이상에 메일 전달하는 경우

  • 서버로 접근 가능성 확인
  • 서버와 연결 설정
  • 메일 전송

SMTP 명령과 응답은 미리 정의된 문자 코드와 개행 문자로 구성된다.

 

SMTP 명령(command)

SMTP 응답(response)

클라이언트가 전송한 명령에 대하여 SMTP 서버는 SMTP 응답(SMTP Response) 기능을 수행한다.

응답 정보는 세 자리 코드와 추가 정보로 구성된다. 코드의 첫 문자는 의미가 다른 2~5 중 하나로 시작한다.

 

SMTP 연결

 

SMTP 연결 설정

  • Well-known 포트 번호: TCP 25번
  • 서버 응답
    • 수신 준비 OK: 200
    • 준비 안 된 경우: 421
  • 클라이언트: HELO
  • 서버 응답: 250

 

데이터 전송

 

명령과 응답으로 구성

메일 주소 확인 과정

  • MAIL FROM
  • RCPT TO

헤더 정보 전송 과정

  • DATA
  • From:
  • To:
  • Date:

메시지 전송 과정

  • 빈 줄 (헤더와 메시지 사이)
  • 송신 메시지
  • 마침표(.)

SMTP 연결 해제

명령과 응답

  • 클라이언트에서 QUIT 요청
  • 서버에서 211로 회신

 

 

 

 

 

출처

https://ko.wikipedia.org/wiki/SOAP

https://narup.tistory.com/80

https://nhj12311.tistory.com/76

https://cloudedi.tistory.com/17

https://www.cho-log.io/32

 smtp - https://naon.me/posts/til136

 

'NETWORK & PROTOCOL' 카테고리의 다른 글

[NETWORK] EJB  (0) 2023.03.30
[PROTOCOL] HTTP  (0) 2021.06.25