개요
SSL(Secure Sockets Layer)은 암호화 기반 인터넷 보안 프로토콜입니다. 인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 Netscape가 1995년 처음으로 개발했습니다. SSL은 현재 사용 중인 TLS 암호화의 전신입니다.
SSL/TLS를 사용하는 웹사이트의 URL에는 "HTTP" 대신 "HTTPS"가 있습니다.
SSL/TLS는 어떻게 작동합니까?
- SSL은 높은 수준의 개인정보 보호를 제공하기 위해, 웹에서 전송되는 데이터를 암호화합니다. 따라서, 데이터를 가로채려는 자는 거의 해독할 수 없는 복잡한 문자만 보게 됩니다.
- SSL은 두 통신 장치 사이에 핸드셰이크라는 인증 프로세스를 시작하여 두 장치의 ID를 확인합니다.
- SSL은 또한 데이터 무결성을 제공하기 위해 데이터에 디지털 서명하여 데이터가 의도된 수신자에 도착하기 전에 조작되지 않았다는 것을 확인합니다.
SSL은 여러 번 개선되어 매번 성능이 개선됐습니다. 1999년에 SSL은 TLS로 업데이트됐습니다.
SSL/TLS는 왜 중요합니까?
원래 웹 상의 데이터는 메시지를 가로채면 누구나 읽을 수 있는 일반 텍스트 형태로 전송됐습니다. 가령 고객이 쇼핑 웹사이트를 방문하여 주문하고, 신용 카드 번호를 입력했다고 하면, 해당 신용 카드 번호가 숨겨지지 않은 채 인터넷을 이동하게 됩니다.
SSL은 이 문제를 바로잡고, 사용자 개인 정보를 보호하기 위해 제작됐습니다. SSL은 사용자와 웹 서버 사이를 이동하는 모든 데이터를 암호화하여, 누군가 데이터를 가로채더라도 무작위 문자만 볼 수 있게 합니다. 이제 고객의 신용 카드 번호는 안전해졌으며, 고객이 번호를 입력한 쇼핑 웹사이트만 이를 볼 수 있습니다.
SSL은 특정한 유형의 사이버 공격도 차단합니다. SSL은 웹 서버를 인증하는데, 공격자들이 사용자를 속여 데이터를 훔치기 위한 가짜 웹사이트를 만드는 일이 있기 때문에, 이러한 인증이 중요합니다. 또한 약병의 조작 방지 봉인처럼, 공격자가 전송 중인 데이터를 조작하지 못하게 막기도 합니다.
SSL 인증이란 무엇입니까?
SSL은 SSL 인증서(공식적으로 "TLS 인증서")가 있는 웹사이트만 실행할 수 있습니다. SSL 인증서는 사람의 신원을 확인하는 신분증이나 배지와 같습니다. SSL 인증서는 웹사이트나 애플리케이션 서버가 웹에 저장하고 표시합니다.
SSL 인증서에 포함된 가장 중요한 정보 중 하나가 웹 사이트의 공개 키입니다. 이 공개 키 덕분에 암호화와 인증이 가능합니다. 사용자의 장치는 공개 키를 보고 이를 이용하여 웹 서버와 안전한 암호화 키를 수립합니다. 한편, 웹 서버에도 기밀로 유지하는 개인 키가 있습니다. 개인 키는 공개 키로 암호화된 데이터를 해독합니다.
CA(인증 기관)는 SSL 인증서 발행을 담당합니다.
SSL의 동작 원리
- 핸드셰이크 - 데이터를 주고받기 위해서 어떤 방법을 사용해야 하는지 서로 파악한다.
- SSL은 80 포트를 사용하는 http와 달리 443 포트를 기본으로 사용하는 TCP 기반의 프로토콜이다. 따라서, SSL 핸드셰이크 전에 TCP 3-way 핸드셰이크 또한 수행한다.
- 전송 - SSL 세션이 생성되고 클라이언트와 서버가 원하는 데이터를 주고받는다.
- 종료 - 데이터 전송의 끝을 서로 알리며 세션을 종료한다.
핸드셰이크 단계
- Client Hello - 클라이언트가 서버에게 연락한다.
- 클라이언트는 자신의 브라우저가 지원할 수 있는 암호화 방식을 먼저 제시한다.
- 랜덤 데이터를 생성하여 추가로 전송한다.
- Server Hello - 서버가 클라이언트에게 연락한다.
- 클라이언트가 제시한 암호화 방식 중 하나를 선정하여 알려준다.
- 서버 자신의 인증서를 전달한다. (이 인증서에는 서버의 공개키가 포함되어 있다.)
- 클라이언트와 마찬가지로 서버에서 생성한 랜덤 데이터를 전송한다.
- Client Key Exchange - 클라이언트는 미리 주고받은 자신과 서버의 랜덤 데이터를 참고하여 서버와 암호화 통신 할 때 사용할 키를 생성하여 서버에 전달한다.
- 키는 서버로부터 받은 공개키로 암호화되어 보내진다.
- Finished - 핸드셰이크 과정이 정상적으로 마무리되면, 클라이언트와 서버 모두 “finished” 메시지를 보낸다.
SSL 적용하기
사전 준비
- NginX 버전
- 서버(EC2, LightSail) 준비
- 실제 존재하는 도메인
- 우리 서비스의 경우 싸피에서 발급받은 주소 사용
실습코치님 추천 인증기관
- zeroSSL (90일 무료)
- certBot (무료)
- letsEncrypt (무료)
인증서 발급 방법
조은비 코치님의 경우 아래의 링크를 따라서 발급 받았다고 함.
필자 개인적인 궁금증에 대한 정리
OpenSSL과 CA의 관계는?
OpenSSL vs CA
인증 기관 대 라이브러리 : Let's Encrypt는 주로 무료 SSL/TLS 인증서를 제공하는 인증 기관인 반면, OpenSSL은 암호화 기능과 프로토콜을 제공하는 소프트웨어 라이브러리입니다.
lets encrypt = 비행기
openssl = 비행기 엔진
SSL은 HTTPS를 위해서만 사용하는가?
SSL과 TLS는 ‘보안 계층’ 이라는 독립적인 프로토콜 계층을 만들어, 위 그림과 같이 응용 계층과 전송 계층 사이에 속하게 된다.
TCP/UDP와 같은 소켓 통신에도 SSL을 사용할 수 있는가?
→ 아래의 링크에 따르면 가능한것으로 보임.
Self Signed Certificate?
인증서(digital certificate)는 개인키 소유자의 공개키(public key)에 인증기관의 개인키로 전자서명한 데이타다.
모든 인증서는 발급기관(CA) 이 있어야 하나 최상위에 있는 인증기관(root ca)은 서명해줄 상위 인증기관이 없으므로 root ca의 개인키로 스스로의 인증서에 서명하여 최상위 인증기관 인증서를 만든다.
이렇게 스스로 서명한 ROOT CA 인증서를 Self Signed Certificate(SSC) 라고 부른다.
IE, FireFox, Chrome 등의 Web Browser 제작사는 VeriSign 이나 comodo 같은 유명 ROOT CA 들의 인증서를 신뢰하는 CA로 브라우저에 미리 탑재해 놓는다.
저런 기관에서 발급된 SSL 인증서를 사용해야 browser 에서는 해당 SSL 인증서를 신뢰할수 있는데 OpenSSL 로 만든 ROOT CA와 SSL 인증서는 Browser가 모르는 기관이 발급한 인증서이므로 보안 경고를 발생시킬 것이나 테스트 사용에는 지장이 없다.
ROOT CA 인증서를 Browser에 추가하여 보안 경고를 발생시키지 않으려면 Browser 에 SSL 인증서 발급기관 추가하기 를 참고하자.
Reference
'Computer Science' 카테고리의 다른 글
Docker란? (1) | 2024.02.19 |
---|---|
HLS(HTTP 라이브 스트리밍)란? (0) | 2023.12.28 |
서버 이중화란? (HA, 클러스터링, Fail-Over) (0) | 2023.10.08 |