순서
1. FTP
2. SFTP
3. SSH
✅ FTP(File Transfer Protocol)
- 원격 서버와 파일을 주고 받을 때 사용하는 통신 규약
- 암호화를 하지 않기 때문에 정보 노출 위험🛑
- 전송 제어를 위한 신호를 주고받는 21번 기본 포트(변경 가능)
- 실제 데이터를 주고받는 20번 포트(변경 가능)
- 능동(active) 모드와 수동(passive) 모드 존재
➤ 능동(active) 모드
- 서버가 클라이언트에게 접속하는 모드
- 아래 그림에서 클라이언트 방화벽에 20번 포트가 차단되어 있으면 연결 불가능
=> 서버 20번 포트는 아웃바운드 허용, 클라이언트는 인바운드 허용 설정 필요
➤ 수동(passive) 모드
- 클라이언트가 서버에게 접속하는 모드
- 20번 아닌 임의의 포트 사용(1024~65535)
=> 임의의 포트를 사용하기 때문에, 클라이언트는 인바운드 모두 허용 설정이 필요한데,
서버 측에서 특정 범위의 포트를 지정해주면 어느정도 문제 해결
✅ SFTP(Secure File Transfer Protocol)
- SSH 방식으로 데이터를 암호화하여 통신하는 FTP
- 22번 기본 포트 사용(변경 가능)
✅ SSH(Secure Shell Protocol)
- 공개키, 개인키를 사용하여 안전한 채널을 구성한 뒤 정보를 교환하는 통신 프로토콜
- 데이터 전송(ex. 깃허브)과 원격 제어(ex. AWS) 등을 수행할 때 사용
- 비대칭키를 통해 서버와 사용자를 인증하고, 대칭키를 통해 데이터를 암호화
**비대칭키 방식 : 다른 키값으로 암호화, 복호화 하는 것
**대칭키 방식 : 같은 키값으로 암호화, 복호화 하는 것
**암호화 : 데이터를 암호처럼 만드는 것
**복호화 : 암호화된 데이터를 원래대로 만드는 것
➤ 서버 인증
① 서버 내부에 공개키, 개인키 생성됨
② 접속을 시도한 클라이언트에게 공개키 전달
③ 클라이언트는 난수값을 생성하고 특정 해시함수로 난수값에 대한 해시값을 생성
④ 클라이언트가 전달받은 공개키로 난수값을 암호화하여 서버에게 전달
⑤ 서버는 가지고 있던 개인키로 복호화하여 원래 난수값 확인
⑥ 서버가 동일한 해시함수로 난수값에 대한 해시값 생성하고 클라이언트에게 전달
⑦ 클라이언트는 자신의 해시값과 서버의 해시값을 비교하여 서버 인증 마무리
**사용자 인증은 클라이언트와 서버의 역할을 바꿔서 똑같이 수행
➤ 데이터 암호화
- 인증 과정에서 생성한 대칭키(=세션키)를 이용하여 데이터를 암호화, 복호화하며 통신
- 통신(SSH 세션)이 종료되면 대칭키 폐기하고, 접속할 때마다 새로운 대칭키 생성
'개발 공부' 카테고리의 다른 글
[call by value, call by reference] feat. stack 영역, heap 영역 (0) | 2023.06.20 |
---|---|
[HTTP, 웹소켓] feat. AJAX (0) | 2023.06.13 |
[OSI 7계층, TCP/IP 4계층] (0) | 2023.06.01 |
[웹 서버, WAS] feat. 정적 페이지, 동적 페이지 (0) | 2023.05.29 |
[렌더링] feat. SSR+MPA, CSR+SPA (0) | 2023.05.23 |