이번 글에서는 SSL/TLS 인증서에 대해 알아보겠습니다. SSL/TLS 인증서는 무엇인지, 왜 필요한지, 그리고 웹 서버와 SSH를 보호하기 위해 인증서를 어떻게 구성할 수 있는지 기본적인 내용을 다루겠습니다.
TLS 인증서는 거래 중 두 당사자 간의 신뢰를 보장하는 데 사용됩니다. 예를 들어, 사용자가 웹 서버에 접근할 때 TLS 인증서는 사용자와 서버 간의 통신이 암호화되었음을 보장하고, 서버가 진짜임을 확인해줍니다.
보안 연결이 없는 상태에서 사용자가 온라인 뱅킹 애플리케이션에 접속하면, 입력한 자격 증명이 평문 형식으로 전송됩니다. 네트웤 트래픽을 엿보는 해커는 쉽게 자격 증명을 탈취하여 사용자의 은행 계정을 해킹할 수 있습니다. 이를 방지하기 위해 데이터 전송을 암호화해야 하며, 이를 위해 암호화 키를 사용합니다.
대칭 암호화는 데이터를 암호화하고 해독하는 데 동일한 키를 사용합니다. 그러나 키를 송신자와 수신자 간에 교환하는 과정에서 해커가 키를 탈취할 위험이 있습니다.
비대칭 암호화는 데이터를 암호화하고 해독하기 위해 두 개의 키 쌍, 즉 개인 키와 공개 키를 사용합니다. 공개 키는 누구와도 공유할 수 있지만, 개인 키는 안전하게 보관해야 합니다. 공개 키로 암호화된 데이터는 오직 대응하는 개인 키로만 해독할 수 있습니다.
서버 접근을 보호하기 위해 비밀번호 대신 키 쌍을 사용해보겠습니다. ssh-keygen
명령을 사용하여 개인 키(id_rsa
)와 공개 키(id_rsa.pub
)를 생성합니다. 공개 키를 서버의 ~/.ssh/authorized_keys 파일에 추가하면, 개인 키를 가진 사용자만 접근할 수 있습니다.
비대칭 암호화를 사용하여 클라이언트와 서버 간의 대칭 키를 안전하게 전송할 수 있습니다. 서버는 공개 키와 개인 키 쌍을 생성하고, 클라이언트는 서버의 공개 키를 사용하여 대칭 키를 암호화한 후 서버로 전송합니다. 서버는 개인 키를 사용해 대칭 키를 해독하여 안전한 통신을 수행합니다.
서버는 키와 함께 인증서를 클라이언트에 보냅니다. 클라이언트는 인증서를 검토하여 서버의 신원을 확인합니다. 신뢰할 수 있는 CA(Certificate Authority)에서 서명된 인증서만이 유효합니다.
서버는 클라이언트에게도 인증서를 요청할 수 있습니다. 클라이언트는 자신의 키 쌍을 생성하고 CA에서 서명된 인증서를 서버에 보냅니다. 서버는 이를 검증하여 클라이언트의 신원을 확인합니다.
네트워크를 통해 전송되는 메시지를 암호화하는 이유와 방법을 살펴보았습니다. 서버는 HTTPS 트래픽을 보호하기 위해 키 쌍과 CA 서명된 인증서를 사용합니다. 최종 사용자는 신뢰가 구축된 후 사용자 이름과 비밀번호를 사용하여 웹 서버에 인증합니다.
추가 정보
- 키 쌍은 두 개의 관련된 키입니다. 한 키로 데이터를 암호화하면, 다른 키로만 이를 복호화할 수 있습니다.
- 공개 키가 포함된 인증서는 일반적으로 .crt 또는 .pem 확장자를 가집니다.