728x90

SSH 연결 과정


암호화: 대칭키, 공개키


1. 일방향 암호화: md5, sha

 

2. 양방향 암호화

 

1) 대칭키(비밀키): des, 3des, aes

1-1) 단점: 키 전달 문제

1-2) 해결책: 비대칭키 암호화

 

2) 비대칭키 또는 공개키, 개인키: rsa

2-1) 대칭키의 단점을 보완

2-2) 공개키로 암호화한 것은 개인키로만 해독 가능

2-3) 개인키로 암호화한 것은 공개키로만 해독 가능

2-4) 공개키는 누구나 가질 수 있는 전세계에 공유 가능한 키

2-5) 개인키는 절대 누구에게도 주지 않는 키

2-6) 단점1: 중간에 공격자가 키를 바꿔치기할 수 있음 > 키의 신뢰성 문제, 대칭키 방식에 비해 속도가 느림

2-7) 해결책1: 대칭키만 암호화해서 전달하는 데 사용

2-8) 해결책 1-1: 제 3의 인증 기관(SSL) > 인증 기관에서 인증한 공개키 = 인증서

 

 

3. SSL

- 평문 통신 프로토콜(http, ftp, telnet 등)을 암호화해주는 프로토콜

- 3.0 이후로 TLS: 현재 전 세계 암호화 통신의 표준

- 일반적으로 http를 암호화하는데 사용해서 https를 SSL로 생각하는 경우가 많음

 

 

SSL 통신 과정


3-way-handshake

 

1. Client Hello: 클라이언트가 서버에 접속, 클라이언트가 생성한 랜덤 데이터(1) 전달, 사용 가능한 암호화 방식

2. Server Hello: 클라이언트에 응답, 서버가 생성한 랜덤 데이터(2) 전달, 인증서(서버의 공개키) 전달, 서버가 선택한 암호화 방식

3. 인증서 확인: 서버의 인증서가 CA에 의해서 발급됐는지 확인, pre master secret 키 생성(12를 조합하여 생성)

  1) 클라이언트에 내장된 CA 리스트 확인

  2) 클라이언트에 내장된 CA의 공개키를 이용해 인증서 복호화

  3) 복호화에 성공한다면 인증서는 CA의 개인키로 암호화된 문서임이 증명됨

4. pre master secret: 인증서 안에 있는 공개키를 이용하여 pre master secret 값을 암호화한 후 서버로 전송

5. pre master secret 복호화: 자신의 비공개키로 복호화

 

=> 서버와 클라이언트 모두 pre master secret 값을 공유하게 됨

 

6. master secret 및 session key(대칭키) 생성

  1) 서버와 클라이언트는 모두 일련의 과정을 거쳐 pre master secret 값을 master secret 값으로 만듦

  2) 서버와 클라이언트가 통신할 때 사용할 세션 키를 서로 가지고 있음


7.  session key 값을 이용해 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화한 후 주고받음

 

8. 세션 종료

  1) 데이터 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알림

  2) 통신에서 사용한 세션 키 폐기

 

 

 

 

SSL 작동 방식


 

 

ssh 명령


ssh 접속 사전 확인 사항


1. sshd 서비스가 실행 중인지 확인

systemctl status sshd -l

 

2. 방화벽: 22번 포트 확인

netstat -an | grep :22

 

3. 클라이언트와 서버의 네트워크 상태 확인

1) NAT 네트워크 설정

2) 호스트 전용 어댑터 설정

 

 

ssh 명령: ssh [사용자 이름]@[IP 주소 또는 DNS 이름]


1. 클라이언트에서 ssh를 이용하여 원격 접속을 시도할 때 사용

 1) 사용자 이름: 접속하고자 하는 사용자의 이름

 2) IP 주소 또는 DNS 이름: 접속하고자 하는 IP 주소 또는 DNS 이름

2. -X 옵션: x포워딩을 하여 GUI 프로그램 사용 가능

 

ssh 설정 파일


1. ssh 구성 파일 위치: /etc/ssh 디렉토리

 1) ssh_config: 클라이언트 설정

 2) sshd_config: 서버 설정

 3) ssh_host_[암호화 알고리즘]_key: 해당 알고리즘의 개인키

 4) ssh_host_[암호화 알고리즘]_key.pub: 해당 알고리즘의 공개키

 

2. ssh 서버 설정: /etc/ssh/sshd_config

 1) 기본 연결 설정: 22번 포트 사용

 

 2) 키 파일 관련 설정: ssh에서 사용할 암호화 알고리즘의 키 파일 선택

 - 현재 rsa, ecdsa, ed25519 암호화 알고리즘을 사용하는 키 파일을 생성하여 /etc/ssh 디렉토리에 저장하도록 설정됨

 

3. 로그 관련 설정: 생성된 로그 파일은 /var/log/secure 에서 확인

 1) 로그 파일 생성 시 해당 로그 파일의 종류 지정

 2) AUTHPRIV: 인증 관련 로그

 

4. 인증 관련 설정

 1) 로그인 실패 시 연결 끊는 시간 설정

 2) 원격 root 로그인 방지

 - 루트 사용자로 원격 접속을 시도할 때 허용 여부 설정

 - 일반적으로 루트 사용자 원격 로그인은 비활성화 설정

# /etc/ssh/sshd.config 파일에서 설정
PermitRootLogin no

# 변경 사항 적용을 위한 서비스 재시작
systemctl restart sshd

3) 원격 로그인 실패 시 패스워드 인증 사용 유무 설정

 

 

 

ssh 실습


ssh 비밀번호 없이 로그인 (키 기반 인증)

- 클라이언트의 공개키를 서버로 복사하여 ssh 비밀번호 없이 로그인이 되는지 확인


1. 클라이언트

# 공개키와 개인키를 생성
ssh-keygen

# 클라이언트에서 생성한 공개키를 서버에 등록함
ssh-copy-id id@serverip 
ssh-copy-id root@10.0.2.15

# 클라이언트의 공개키 확인
cat /root/.ssh/id_rsa.pub

 

1) 공개키와 개인키 생성

 

2) 생성한 클라이언트의 공개키를 서버에 등록

 

3) 클라이언트의 공개키 확인

 

 

2. 서버

# 복사된 클라이언트의 공개키 확인
cat /root/.ssh/authorized_keys

 

- 복사된 클라이언트의 공개키 확인

 

 

3. 클라이언트

- 암호 없이 SSH 연결 성공

 

728x90

+ Recent posts