HTTP 통신 - 브라우저 ↔ 서버가 평문(일반 텍스트)로 정보 교환
→ 중간에 누군가 통신 중에 데이터를 가로챈다면…!? = 스니핑(Sniffing)
→ 🚨 보안 이슈 발생
⇒ HTTP에서 보안을 강화한 확장 HTTPS 등장!
HTTPS는 HTTP/1.1을 사용하면서 데이터 전송 전에
네트워크 보안 프로토콜인 TLS를 사용하는 법이라고 이해할 수 있습니다.
데이터 전송 전에 안전하고 암호화된 연결을 생성!
→ 모든 요청과 응답을 TLS에 따라 암호화
⇒ 중간에 누군가 가로채더라도 데이터를 노출시키지 않음
= 카드 정보와 비밀번호 등과 같은 민감한 정보 보호
SSL = 보안 소켓 계층(Secure Sockets Layer, SSL) - 암호화 기반 인터넷 보안 프로토콜
→ (1999년) TLS = 전송 계층 보안(Transport Layer Security)
🌐 인터넷 트래픽을 암호화하고 서버 신원을 확인하기 위한 프로토콜
SSL/TLS 암호화 과정 요약
- 지원 가능한 알고리즘(RSA 등) 서로 교환
- 키 교환, 인증
- 대칭키 암호로 암호화하고 메시지 인증
SSL/TLS는 TLS 인증서가 있는 웹사이트만 실행할 수 있습니다.
CA(Certificate Authority; 인증 기관)가 TLS 인증서 발행을 담당합니다.
TLS 인증서
= 웹사이트나 애플리케이션 서버가 웹에 저장하고 표시하는 일종의 신분증TLS 인증서에 포함된 내용
- 인증서가 발급된 대상 도메인 이름
- 발급받은 사람, 조직, 장치
- 발급한 인증 기관
- 인증 기관의 디지털 서명
- 관련 하위 도메인
- 인증서 발급 날짜
- 인증서 만료 날짜
- 공개 키(개인 키는 비밀로 유지됨)
발급 가능 도메인 범위
도메인 유효성 검사 - 도메인 관리만 증명
실무적인 프로세스 - CA가 담당자에게 문의
확장 유효성 검사 - 사용자 검증 후 발행
네이버로 가봅시당 따란
TLS 인증서 발급 과정
- 웹 사이트에서 공개키 - 개인키 쌍을 생성한다.
- 웹 사이트의 정보와 공개키를 바탕으로 서명 요청서(CSR)을 작성하여 CA에게 보낸다.
- CA는 웹 사이트의 공개키를 해시 후 CA의 개인키로 암호화해서 디지털 서명을 만든다.
- 웹 사이트 정보와 디지털 서명 정보를 포함하는 인증서를 웹 사이트에게 발급해준다.
TLS 인증 암호화 과정 = TLS 핸드쉐이크
- 비대칭 암호화
- 핸드쉐이크 개시: 클라이언트의 최초 서버 연결 시도
클라이언트가 지원하는 TLS 버전, 지원되는 암호 제품군, 그리고 "클라이언트 무작위"라고 하는 무작위 바이트 문자열 포함- 핸드쉐이크 응답: 서버는 클라이언트에 응답으로 SSL 인증서와 서버에서 선택한 암호 제품군, 그리고 서버에서 생성한 또 다른 무작위 바이트 문자열인 "서버 무작위"를 포함하는 메시지 전송
- 인증: 클라이언트가 받은 SSL 인증서를 CA를 통해 검증
- 예비 마스터 암호: 클라이언트가 공개키로 암호화한 “예비 마스터 암호” 무작위 바이트열 하나 더 전송
- 개인키 사용: 클라이언트가 보낸 예비 마스터 암호는 서버의 개인키로만 복호화 가능
- 세션키 생성: 클라이언트와 서버가 모두 클라이언트 무작위, 서버 무작위, 예비 마스터 암호를 이용해 세션키를 생성 → 둘이 같은 결과 도출
- 대칭 암호화
- 클라이언트 준비 완료: 클라이언트가 세션키로 암호화된 “완료” 메시지 전송
- 서버 준비 완료: 서버가 세션키로 암호화된 “완료” 메시지 전송
- 대칭 암호화 성공: 핸드쉐이크 성공 + 세션키 이용 통신 진행
🌐 Certbot is a free, open source software tool for automatically using Let’s Encrypt certificates on manually-administrated websites to enable HTTPS
= 자동으로 간편하게 Let’s Encrypt에 TLS 인증서를 요청하는 오픈소스
Let’s Encrypt = TLS 인증서를 제공하는 비영리 인증 기관 (CA)
Certbot을 활용해서 Let’s Encrypt에 TLS 인증서 요청 !