SSL (Secure Socket Layer): 암호화 기반 인터넷 프로토콜
네트워크에 통신 보안을 제공하기 위해 설계된 암호 규약
간혹 SSL를 TLS라고도 하는데, 같은 의미니까 큰 문젠 없다.
주로 SSL을 많이 쓴다.
Client : 유저 (브라우저 ex. 크롬, 파이어폭스, 사파리)
Server : 서버
CA : 인증 기관 (Certificate Authority)
SSL 인증서 구성 (3단계)
ROOT 인증서
: 다른 인증서와 달리 자체 서명되어 발급자와 발급대상이 동일하며 다른 인증서를 발급하고 신뢰성을 검증하는데 사용.
중간 인증서 (Chain / Intermediate)
: root 인증서와 발급받는 도메인 인증서 사이에 있는 인증서.
루트와 도메인 인증서 사이를 연결하여 발급된 인증서가 신뢰할 수있는 인증서인지 검증하는 역할
서버 인증서 (Leaf)
: Https 서비스를 위해 발급받은 인증서로 서비스가 올라간 서버에 적용됨.
이 3단계의 인증서를 인증서 체인(Certificate Chain)이라고 한다.
인증서 체인은 서버 인증서에서 시작하여 Root 인증서로 끝난다.
이 3개의 인증서 체인은 하위 구조의 인증서를 서명하고 상위 구조의 인증서를 참고하는 방식
참고 방식 (서명은 반대로..)
서버 인증서 --> 중간 인증서 --> 루트 인증서
Symmetric key / Asymmetric key
Symmetric key (대칭키)
: 대칭키는 암호화와 복호화에 동일한 키를 사용한다.
대칭키의 특징은 일반적으로 빠르지만, 관리나 보안 면에서 취약할 수 있다.
대표적인 대칭키 알고리즘은 AES(Advanced Encryption Standard)
Asymmetric key (비대칭)
아래에 나올 public key와 private key의 표본이 된다.
비대칭키는 대칭키와 반대로 암호화와 복호화되는 키를 서로 다른 키로 사용한다.
대표적인 비대칭키 알고리즘은 RSA
Public key / Private key
암호화와 해독을 할 수 있는 열쇠.
일반적으로 하나의 공개된 (Public key) 열쇠와 감춰진 (Private key) 열쇠의 쌍으로 구성.
Public key (공개 키)
: 말 그대로 공개된 열쇠. 어떤 사용자라든지 사용할 수 있는 열쇠이다.
Private key (개인 키)
: 본인만 알 수 있는 열쇠. 어려우면 비밀번호로 생각.
메세지를 공개키로 암호화되었다면, 개인 키로 복호화할 수 있다.
반대로, 개인키로 암호화되었다면, 공개키로 복호화.
이러한 조합의 한쌍의 열쇠들을 특정 알고리즘을 이용하여 생성하는데,
보편적으로 RSA 방식으로 많이 사용됨.
RSA
비대칭 암호화 기술 중 하나로 (Rivest, Shamir, Adleman) 세 명의 개발자들에 의해 만들어짐.
공개 키와 개인 키를 사용하여 통신을 암호화하고 디지털 서명을 생성하는데 사용.
상대방에게 메세지를 암호화해서 전달하고 싶은 경우
이것은 그림을 그려가며 생각해보는 것이 좋겠다.
(먼저, 공개 키와 개인 키의 개념을 안다는 전제하에..)
1. 철수가 메세지의 내용을 영희만 확인 할 수 있게 영희의 공개 키로 암호화를 한다.
2. 철수가 영희의 공개키로 암호화시킨 메세지를 보낸다.
3. 영희는 철수에게 받은 암호화된 메세지를 자신만이 가지고 있는 개인키로 복호화한다.
4. 영희가 철수가 보냈던 메세지의 내용을 확인한다.
이런 케이스는 사용량이 적으면 상관이 없지만, 사용량이 많아지면 부하가 증가한다.
왜냐면 암호화든, 복호화든 죄다 계산해내야하기 때문..
나 자신을 증명하고 싶은 경우 (디지털 서명)
1. 철수가 "저는 철수입니다. -철수가 "라는 메세지를 작성했다.
2. 철수가 영희에게 메세지를 보내기 전에 "-철수가"라는 부분을 암호화한다.
"-철수가"라는 부분을 암호화 : 이 부분이 철수의 디지털 서명이 된다.
3. 메세지를 받은 영희는 암호화된 디지털 서명 부분을 철수의 공개 키로 복호화한다.
4. 영희가 철수가 보낸 메세지의 내용을 확인한다.
SSL Handshake
Https 통신과정에서 송신자와 수신자 간에 암호화 통신을 하기 위한 방법과 수단에 대해 공유한다.
클라이언트가 서버에게 데이터를 암호화할 대칭키(비밀키)를 타인에게 노출시키지 않고 전송하기 위해 협상을 한다.
그것이 바로 SSL Handshake이다.
전반적으로 TCP의 3-way Handshake의 방식을 따른다.
어디까지나 데이터를 주고 받는 것이기 때문..
1. SYN : 송신자가 수신자에게 연결을 요청한다.
2. SYN-ACK : 수신자가 송신자가 보낸 요청(SYN)을 확인한다. 연결 요청을 수락하고 송신자에게 응답한다.(SYN-ACK)
3. ACK: 송신자는 수신자의 SYN-ACK 메세지를 받고, 수신자에게 연결을 요청하는 ACK 메세지를 보낸다. 이 때 송신자는 자신의 초기 순차 번호를 증가시킨다.
여기까지가 우리가 흔히 말하는 TCP의 3-way Handshake이다.
연결이 완료되면 송신자와 수신자간의 통신이 가능한 상태가 된다.
그리고 이제부터 비로소 SSL Handshake를 진행한다.
그래서 4번부터 시작한다.
4. Client Hello : 송신자가 수신자에게 연결을 요청하는 메세지를 보낸다.
5. Server Hello : 수신자는 송신자의 요청에 응답한다. 그리고 송신자에게 공개 키(public key)를 보낸다.
6. Authentication : 수신자는 송신자에게 인증서를 제공하여 자신의 신원을 증명한다.
7. Key Exchange : 송신자는 수신자의 공개 키를 사용하여 세션 키를 생성한다. 이를 수신자에게 암호화하여 전송한다.
수신자는 자신의 개인키(private key)를 사용하여 세션 키를 복호화한다.
8. 암호화 세션 설정 : 송신자와 수신자는 서로 주고 받을 데이터를 암호화하고, 안전한 통신 채널을 설정한다.
9. 완료: SSL Handshake가 완료되면 송신자와 수신자 간의 안전한 통신 채널을 구축하고 데이터를 안전하게 주고 받는다.
SSL Handshake는 통신의 시작부터 끝까지 모든 단계의 보안성과 신뢰성을 제공하여 통신 중간 타인의 공격이나 데이터 변조와 같은 공격을 방지할 수 있다. 이를 통해 송신자와 수신자간에 안전한 통신을 할 수 있다.
참조
'엔지니어링' 카테고리의 다른 글
| L7 장비 - 용어 정리 (0) | 2024.06.11 |
|---|---|
| TCP 연결 확인 방법 (0) | 2024.06.03 |
| TCP 상태 (0) | 2024.05.08 |
| IP에 대해서 (0) | 2024.05.08 |
| 리눅스 설치 기본 패키지 (0) | 2024.04.26 |