WEB개념/NETWORK & PROTOCOL

[PROTOCOL] SOAP, FTP, SMTP, SSH

wooyeon06 2021. 6. 28. 16:34

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와 동일한 개념이다. 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 개인키 & 공개키
구현
방화벽에서 다양한 포트를 열어야 함
→ 네트워크 위험, 보안 약화
구현이 비교적 쉬움
속도
명령, 데이터 채널이 비동기적으로 실행 -> 약간 빠름

 


3. SSH 

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

뜻 그대로 보안 셸이다. 기존의 유닉스 시스템 셸에 원격 접속하기 위해 사용하던 텔넷은 암호화가 이루어지지 않아 계정 정보가 탈취될 위험이 높으므로, 여기에 암호화 기능을 추가하여 1995년에 나온 프로토콜이다. 셸로 원격 접속을 하는 것이므로 기본적으로 CLI 상에서 작업을 하게 된다. 기본 포트는 22번이다.

 

 

1. SSH 접속 과정

 

1) SSH 클라이언트 실행 :
 사용자가 SSH 클라이언트를 실행하고, 접속하려는 서버의 IP 주소 또는 도메인 이름과 포트(기본적으로 22)를 입력합니다.

 

2) 서버에 연결 요청 :

 클라이언트는 지정된 IP 주소와 포트로 TCP 연결을 시도합니다.

 

3) 서버의 공개 키 전송 :
 서버는 클라이언트에 자신의 공개 키를 전송합니다. 이 공개 키는 클라이언트가 서버의 신원을 검증하는 데 사용됩니다.

 

4) 서버의 호스트 키 검증 :
클라이언트는 서버의 호스트 키를 확인합니다. 호스트 키가 미리 저장된 키와 일치하지 않으면, 경고 메시지가 표시되고 연결을 계속할 것인지 선택하게 됩니다.
이 단계에서 호스트 키는 처음 접속할 때는 클라이언트의 ~/.ssh/known_hosts 파일에 저장됩니다.

 

5) 세션 키 생성 :
클라이언트는 서버로부터 받은 공개 키를 사용하여 세션 키(대칭 키)를 생성합니다. 이 세션 키는 데이터 암호화에 사용됩니다.

 

6) 세션 키 전송 :
클라이언트는 생성된 세션 키를 서버에 보내는데, 이때 서버의 공개 키로 암호화하여 전송합니다. 서버는 자신의 개인 키를 사용하여 이 세션 키를 복호화합니다.

 

7) 인증 방식 선택 :
클라이언트와 서버 간의 연결이 안전하게 설정된 후, 클라이언트는 서버에 대한 인증을 수행합니다. 인증 방법은 다음과 같습니다:

 

  • 비밀번호 인증: 사용자가 비밀번호를 입력합니다.
  • 키 기반 인증: 클라이언트는 자신의 개인 키를 사용하여 서버에 인증을 시도합니다. 서버는 클라이언트의 공개 키와 비교하여 인증을 확인합니다.

8) 세션 시작 :
인증이 성공하면, SSH 연결이 확립되며 사용자는 안전한 터미널 세션에 접근할 수 있습니다.

 

9) 데이터 전송 :
이제 클라이언트와 서버 간에 암호화된 데이터가 안전하게 전송됩니다. 이 과정에서 모든 전송된 데이터는 세션 키로 암호화됩니다.

 

10) 세션 종료 :
사용자가 로그아웃하거나 연결을 끊으면, SSH 세션이 종료됩니다. 이때 세션 키와 관련된 정보는 더 이상 사용되지 않습니다.

 


4. SMTP

모든 네트워킹 프로토콜은 미리 정의한 데이터 교환 프로세스를 따릅니다. SMTP는 이메일 클라이언트와 메일 서버 간의 데이터 교환 프로세스를 정의합니다. 사용자는 이메일 클라이언트와 상호 작용합니다. 

 

SMTP 이용 과정

- 메일 송신 과정

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

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

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

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

 

SMTP 명령(command)

HELO SMTP 세션의 시작을 알리고, 클라이언트의 도메인 이름을 서버에 전송합니다.
 (HELO client.example.com)
EHLO HELO의 확장 버전으로, 서버에 클라이언트가 지원하는 확장 기능을 요청합니다. (EHLO client.example.com)
MAIL FROM 발신자의 이메일 주소를 지정합니다. (MAIL FROM:<sender@example.com>)
RCPT TO 수신자의 이메일 주소를 지정합니다. (RCPT TO:<recipient@example.com>)
DATA 메일 데이터 전송을 시작할 것을 서버에 알립니다. 다음 줄에 메일 본문이 포함됩니다. 데이터의 끝은 .으로 표시합니다.
QUIT SMTP 세션을 종료합니다. 
RSET 현재 세션의 상태를 초기화합니다.
VRFY 특정 이메일 주소의 존재 여부를 확인합니다.
EXPN 특정 이메일 주소의 배달 리스트를 요청합니다.
NOOP "No operation"의 약자로, 서버에 아무 작업도 하지 않고 응답을 요청합니다.

 

SMTP 응답(response)

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

 

200 OK: 요청이 성공적으로 처리됨
250 Requested mail action okay, completed
354 Start mail input; end with <CRLF>.<CRLF>
421 Service not available, closing transmission channel
450 Requested mail action not taken: mailbox unavailable
451 Requested action aborted: local error in processing
550 Requested action not taken: mailbox unavailable
553 Requested action not taken: invalid mailbox name
554 Transaction failed

 

 

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