Search
Duplicate

수업
Network Study
주제
5 more properties

HTTPS와 공개 키 암호화

1.
서버 인증서:
HTTPS 통신에서 공개 키는 주로 서버 인증서를 통해 관리됩니다. 서버는 인증 기관(CA)으로부터 발급받은 인증서를 사용하여 자신의 공개 키를 클라이언트에게 제공합니다.
클라이언트(브라우저)는 이 인증서를 사용하여 서버의 신뢰성을 확인합니다.
2.
TLS 핸드셰이크:
HTTPS는 TLS(Transport Layer Security) 프로토콜을 사용하여 안전한 연결을 설정합니다.
TLS 핸드셰이크 과정에서 클라이언트와 서버는 세션 키를 생성하기 위해 비대칭 암호화(공개 키 암호화)를 사용합니다. 이 세션 키는 이후의 통신을 암호화하는 데 사용됩니다.
클라이언트는 서버의 공개 키를 사용하여 세션 키를 암호화하여 서버에 전송합니다. 서버는 자신의 비밀 키를 사용하여 이 세션 키를 복호화합니다.
3.
클라이언트 키 필요 없음:
HTTPS 통신에서는 일반적으로 클라이언트가 자신의 공개 키/비밀 키 쌍을 필요로 하지 않습니다. 대신 서버의 공개 키를 사용하여 세션 키를 안전하게 전송합니다.

SSH 공개 키 인증

1.
공개 키와 비밀 키 쌍:
SSH 공개 키 인증에서는 클라이언트가 자신의 공개 키와 비밀 키 쌍을 생성합니다.
클라이언트는 자신의 공개 키를 서버에 등록하고, 비밀 키를 안전하게 보관합니다.
공개키의 경우 ssh-copy-id를 통해 서버의 ~/.ssh/authorized_keys에 공개키를 저장 할 수 있습니다. 혹은 직접 .pub파일을 저장하는 방식도 있습니다.
2.
서버에 공개 키 등록:
클라이언트의 공개 키는 서버의 ~/.ssh/authorized_keys 파일에 등록됩니다.
클라이언트가 서버에 접속할 때, 서버는 클라이언트에게 특정 데이터를 전송하고, 클라이언트는 자신의 비밀 키를 사용하여 이 데이터를 암호화하여 서버에 반환합니다. 서버는 클라이언트의 공개 키를 사용하여 이 데이터를 복호화함으로써 클라이언트를 인증합니다.

비교

HTTPS:
주로 서버 인증을 위해 사용됩니다.
클라이언트 측에서는 별도의 공개 키/비밀 키 쌍이 필요하지 않습니다.
서버의 신뢰성을 보장하고, 안전한 세션 키를 생성하는 데 사용됩니다.
SSH:
클라이언트와 서버 모두에서 사용됩니다.
클라이언트는 자신의 공개 키/비밀 키 쌍을 생성하고, 서버에 공개 키를 등록합니다.
클라이언트가 서버에 접속할 때 클라이언트를 인증하는 데 사용됩니다.
따라서, HTTPS를 사용할 때는 클라이언트 측에서 공개 키/비밀 키 쌍이 필요하지 않지만, SSH 공개 키 인증을 사용할 때는 클라이언트 측에서 공개 키/비밀 키 쌍이 필요합니다.
SSH는 양방향 인증을 위해 클라이언트와 서버 모두에서 공개/비밀키 쌍을 사용할 수 있습니다. 아래에 자세한 설명을 제공하겠습니다.

SSH 공개 키 인증 과정

서버의 역할:

1.
서버의 공개/비밀키 쌍:
서버는 자신의 신원을 증명하기 위해 공개 키와 비밀 키 쌍을 가지고 있습니다.
클라이언트가 서버에 처음 접속할 때, 서버는 자신의 공개 키를 클라이언트에게 보냅니다.
클라이언트는 서버의 공개 키를 사용하여 서버의 신뢰성을 확인합니다. 이는 클라이언트가 처음 접속할 때 서버의 공개 키를 저장하고 이후 접속 시 이 키를 사용하여 서버의 신원을 확인하는 방식입니다.

클라이언트의 역할:

1.
클라이언트의 공개/비밀키 쌍:
클라이언트는 서버에 인증을 받기 위해 자신의 공개 키와 비밀 키 쌍을 사용합니다.
클라이언트의 공개 키는 서버에 미리 등록되어 있어야 합니다. 이 공개 키는 서버의 ~/.ssh/authorized_keys 파일에 저장됩니다.
클라이언트가 서버에 접속할 때, 서버는 클라이언트가 제공한 공개 키를 사용하여 클라이언트의 신원을 확인합니다. 이를 위해 서버는 클라이언트에게 도전 과제를 보내고, 클라이언트는 자신의 비밀 키로 이 도전 과제를 암호화하여 서버에 보냅니다. 서버는 클라이언트의 공개 키를 사용하여 암호화된 도전 과제를 복호화하여 클라이언트를 인증합니다.

요약:

서버의 공개/비밀키:
서버는 자신의 신원을 증명하기 위해 공개 키와 비밀 키를 사용합니다. 클라이언트는 서버의 공개 키를 사용하여 서버의 신원을 확인합니다.
클라이언트의 공개/비밀키:
클라이언트는 서버에 인증을 받기 위해 자신의 공개 키와 비밀 키를 사용합니다. 클라이언트의 공개 키는 서버에 미리 등록되어 있어야 하며, 서버는 이 공개 키를 사용하여 클라이언트의 신원을 확인합니다.

SSH 접속 과정 요약:

1.
서버 인증:
클라이언트가 서버에 접속을 시도합니다.
서버는 자신의 공개 키를 클라이언트에게 보냅니다.
클라이언트는 서버의 공개 키를 확인하여 서버의 신원을 검증합니다.
2.
클라이언트 인증:
서버는 클라이언트의 공개 키를 ~/.ssh/authorized_keys 파일에서 찾습니다.
서버는 클라이언트에게 도전 과제를 보내고, 클라이언트는 자신의 비밀 키로 이 도전 과제를 암호화합니다.
클라이언트가 암호화된 도전 과제를 서버에 보내면, 서버는 클라이언트의 공개 키로 이를 복호화하여 클라이언트를 인증합니다.

결론:

클라이언트의 공개 키를 서버에 저장하는 이유는 클라이언트가 서버에 접속할 때 비밀번호 대신 공개 키 기반 인증을 사용하기 위함입니다. 서버는 클라이언트의 공개 키를 사용하여 클라이언트의 신원을 확인할 수 있습니다. 이는 비밀번호 기반 인증보다 더 안전한 방식입니다.
1.
서버 공개키 확인:
클라이언트는 서버에 접속을 시도합니다.
서버는 자신의 공개키를 클라이언트에 전송합니다.
클라이언트는 known_hosts 파일에 서버의 공개키가 있는지 확인합니다.
만약 없다면, 서버의 공개키를 known_hosts 파일에 등록할 것인지 유저에게 확인합니다.
2.
메시지 송수신:
클라이언트는 서버로 메시지를 전송합니다.
서버는 자신의 비밀키를 사용하여 메시지를 복호화합니다.
3.
메시지 검증:
서버는 클라이언트의 메시지를 검증합니다.
4.
클라이언트 공개키 확인:
서버는 클라이언트의 공개키가 authorized_keys 파일에 등록되어 있는지 확인합니다.
만약 없다면, 클라이언트는 패스워드를 입력해야 합니다.
5.
서버의 비밀키로 메시지 암호화:
서버는 자신의 비밀키로 메시지를 암호화하여 클라이언트에 전송합니다.
6.
클라이언트의 비밀키로 메시지 복호화:
클라이언트는 자신의 비밀키로 서버가 보낸 메시지를 복호화합니다.
7.
메시지 검증:
클라이언트는 서버가 보낸 메시지를 검증합니다.
서버: 비밀키(복호화/암호화), 공개키(클라이언트에 제공).
클라이언트: 비밀키(복호화/암호화), 공개키(서버에 등록).

클라이언트와 서버가 모두 키 페어를 가지고 있어야 하는 이유

1.
서버 인증:
서버의 공개키/비밀키: 클라이언트가 서버에 접속할 때 서버의 공개키를 사용하여 서버의 신원을 확인합니다. 클라이언트는 서버의 공개키로 서버에서 보낸 데이터를 복호화하여 서버가 올바른 서버임을 확인합니다.
2.
클라이언트 인증:
클라이언트의 공개키/비밀키: 서버는 클라이언트의 신원을 확인하기 위해 클라이언트의 공개키를 사용합니다. 클라이언트의 공개키는 서버의 authorized_keys 파일에 미리 등록되어 있어야 합니다. 서버는 클라이언트가 제공하는 데이터를 클라이언트의 공개키로 검증하여 클라이언트의 신원을 확인합니다.

각각의 시나리오

1. 클라이언트만 키 페어를 가지고 있는 경우:

서버는 클라이언트를 인증할 수 있지만, 클라이언트는 서버의 신원을 확인할 수 없습니다. 이는 보안상 매우 위험합니다.

2. 서버만 키 페어를 가지고 있는 경우:

클라이언트는 서버의 신원을 확인할 수 있지만, 서버는 클라이언트를 인증할 수 없습니다. 이는 허가되지 않은 접근을 허용하게 됩니다.

결론

SSH 통신은 상호 인증을 통해 이루어지며, 이를 위해 클라이언트와 서버 모두 각각의 키 페어를 가져야 합니다. 양쪽 모두 키 페어를 가지고 있어야만 안전하고 신뢰할 수 있는 통신이 가능합니다. 한쪽만 키 페어를 가지고 있는 경우에는 SSH 통신이 성립되지 않으며, 보안상 문제를 초래하게 됩니다.
AWS에서 제공하는 .pem 파일은 SSH와 관련이 있습니다. AWS에서는 EC2 인스턴스에 접속하기 위해 SSH를 사용합니다. 이 .pem 파일은 개인 키(Private Key)로, 이를 사용하여 EC2 인스턴스에 안전하게 접속할 수 있습니다. 이 과정은 다음과 같이 이루어집니다:
1.
키 페어 생성: AWS 콘솔이나 CLI를 통해 EC2 인스턴스를 생성할 때 키 페어를 생성합니다. 이 과정에서 AWS는 사용자에게 .pem 파일(개인 키)을 다운로드하라는 메시지를 표시합니다. AWS는 해당 키 페어의 공개 키를 자동으로 생성하고 이를 EC2 인스턴스에 등록합니다.
2.
인스턴스 생성 시 공개 키 등록: AWS는 EC2 인스턴스를 생성할 때 해당 인스턴스의 ~/.ssh/authorized_keys 파일에 생성된 키 페어의 공개 키를 자동으로 추가합니다. 이렇게 하면 해당 키 페어의 개인 키를 가진 사용자만이 SSH를 통해 EC2 인스턴스에 접속할 수 있게 됩니다.
3.
SSH 접속:
사용자는 다운로드 받은 .pem 파일을 사용하여 SSH를 통해 EC2 인스턴스에 접속합니다.
예를 들어, 다음과 같은 명령어를 사용합니다:
bash코드 복사 ssh -i /path/to/your-key-pair.pem ec2-user@your-ec2-instance-public-dns
Shell
복사
이 과정에서 .pem 파일은 SSH 클라이언트가 서버와 안전하게 통신할 수 있도록 하는 개인 키를 포함하고 있습니다. 서버는 AWS에서 생성된 공개 키를 가지고 있으며, 클라이언트는 개인 키를 가지고 있어 공개 키 인증 방식으로 SSH 연결을 할 수 있게 됩니다.