HTTPS란?
**HTTPS (Hypertext Transfer Protocol Secure)**는 인터넷을 통한 안전한 데이터 전송을 보장하기 위한 HTTP의 보안 버전이야. SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용해 암호화, 데이터 무결성, 인증을 제공하여 인터넷 상의 데이터 교환을 보호해. 민감한 정보, 예를 들어 로그인 정보, 금융 데이터 등을 안전하게 보호하기 위해, HTTPS는 거의 모든 웹사이트에서 기본적으로 사용되고 있어.
HTTPS의 주요 기능
1. 암호화 (Encryption):
• HTTPS는 전송되는 데이터를 SSL/TLS 프로토콜을 통해 암호화해.
• 이 과정에서 중간에 데이터를 가로채더라도 읽을 수 없는 형태로 바뀌어 있기 때문에 중간자 공격(MITM)을 방지할 수 있어.
• 특히 대칭키 암호화를 사용하여 클라이언트(브라우저)와 서버가 데이터를 안전하게 주고받아.
2. 데이터 무결성 (Data Integrity):
• 데이터 전송 중에 변조가 일어나지 않도록 보장해.
• 전송되는 데이터가 송신자에서 수신자에게 도달하는 동안 변경되지 않았다는 것을 확인할 수 있어. 이를 통해 해커나 악의적인 제3자가 데이터 전송 중에 데이터를 수정하는 것을 방지할 수 있어.
3. 인증 (Authentication):
• 서버는 SSL/TLS 인증서를 사용해 자신의 신원을 클라이언트에게 증명해.
• 클라이언트는 인증서를 통해 접속 중인 서버가 신뢰할 수 있는 **공인 인증 기관(CA)**에 의해 인증된 서버임을 확인할 수 있어.
• 이를 통해 피싱 사이트나 악의적인 서버에 접속하는 위험을 줄일 수 있어.
HTTPS의 동작 원리 (SSL/TLS 핸드셰이크)
HTTPS는 웹 브라우저와 웹 서버 간의 SSL/TLS 핸드셰이크를 통해 안전한 통신 채널을 설정해. 이 과정에서 브라우저는 서버의 신뢰성을 확인하고 암호화된 데이터 통신을 위한 키를 설정하게 돼. 아래는 그 과정을 간략히 설명한 거야:
1. 클라이언트 접속 요청:
• 브라우저가 HTTPS 페이지에 접속을 시도하면, 서버에 SSL 핸드셰이크 요청을 보내.
2. 서버의 인증서 전송:
• 서버는 클라이언트에 SSL/TLS 인증서를 보내고, 인증서에는 서버의 공개키와 인증 기관(CA)의 디지털 서명이 포함돼 있어.
3. 인증서 검증:
• 브라우저는 서버가 제공한 인증서가 신뢰할 수 있는 **인증 기관(CA)**에 의해 발급된 것인지 확인해.
• 브라우저는 운영체제나 자체적으로 내장된 신뢰할 수 있는 CA 목록에서 서버의 인증서를 검증해.
4. 세션 키 설정:
• 인증서 검증이 완료되면, 브라우저는 대칭키(Session Key)를 생성해. 이 대칭키는 이후 통신의 암호화에 사용돼.
• 대칭키는 서버의 공개키로 암호화되어 서버로 전송돼.
5. 데이터 암호화 및 전송:
• 이후 모든 통신은 이 대칭키를 사용해 암호화되어 안전하게 전송돼. 서버와 클라이언트만이 이 데이터를 해독할 수 있어.
HTTPS의 특징
1. 포트 번호:
• HTTPS는 443번 포트를 사용해, 이는 일반 HTTP가 사용하는 80번 포트와는 달라. HTTPS가 기본적으로 사용하는 포트는 443이기 때문에, 브라우저 주소창에서 https://를 입력할 때, 특별히 포트를 지정하지 않아도 이 포트가 사용돼.
2. 응용 분야:
• HTTPS는 보안이 중요한 웹사이트에서 사용돼. 예를 들어, 온라인 뱅킹, 전자 상거래, 로그인 페이지 등에서 데이터를 안전하게 보호하기 위해 HTTPS가 널리 사용돼.
• 최근에는 Google과 같은 회사가 모든 웹사이트가 HTTPS를 사용하도록 권장하고 있으며, HTTPS를 사용하지 않는 사이트는 브라우저에서 안전하지 않음 경고가 표시되기도 해.
SSL (Secure Sockets Layer)
SSL은 HTTPS가 사용하는 보안 프로토콜로, 클라이언트와 서버 간의 데이터 전송을 암호화하여 데이터를 보호해. SSL은 현재 더 발전된 TLS(Transport Layer Security)로 대체되었지만, 여전히 SSL이라는 용어는 많이 사용되고 있어.
1. 암호화된 연결:
• SSL을 사용하면 클라이언트와 서버 간의 모든 데이터가 암호화되어 전송돼.
2. 핸드셰이크 프로토콜:
• SSL 연결을 설정하기 위해 핸드셰이크 과정이 이루어져. 이 과정에서 클라이언트와 서버는 서로의 신원을 확인하고, 안전한 통신을 위한 암호화 키를 협상해.
3. 데이터 무결성:
• SSL은 전송된 데이터가 변조되지 않도록 보장하며, 데이터의 무결성을 확인해. **메시지 인증 코드(MAC)**를 사용하여 데이터가 송수신 중에 변경되지 않았음을 확인해.
4. 인증서 사용:
• SSL은 서버의 공개키와 인증서를 사용해 서버의 신원을 인증해. 이 인증서는 **인증 기관(CA)**에 의해 발급돼, 클라이언트가 서버의 신뢰성을 확인할 수 있어.
Certificate Authority (CA) 과정
**인증 기관(CA)**는 HTTPS 통신에서 중요한 역할을 해. CA는 서버가 신뢰할 수 있는 곳임을 인증해주는 역할을 하지. 웹사이트가 인증 기관으로부터 인증서를 발급받는 과정은 다음과 같아:
1. 키 생성:
• 웹 서버에서 공개키와 비밀키를 생성해. 비밀키는 외부에 절대 공개되지 않고 서버에만 저장돼.
2. CSR (인증서 서명 요청) 생성:
• 서버는 CSR(Certificate Signing Request)을 생성해. CSR에는 서버의 공개키와 소유자 정보가 포함돼 있어.
3. CSR 제출:
• 웹사이트 소유자는 이 CSR을 인증 기관에 제출해. 여기서 도메인 소유권을 검증하는 절차가 진행돼.
4. 인증서 발급:
• CA는 검증 절차를 거쳐 웹사이트에 인증서를 발급해. 이 인증서에는 서버의 공개키와 함께 CA의 서명이 포함돼.
5. 인증서 설치:
• 서버는 발급받은 인증서를 웹 서버에 설치하고, HTTPS 통신을 설정해.
브라우저와 CA의 신뢰 관계
브라우저는 여러 신뢰할 수 있는 CA의 루트 인증서를 미리 포함하고 있어. 이 루트 인증서는 서버 인증서를 검증할 때 사용돼. CA와 브라우저 간의 신뢰 관계는 루트 인증서를 통해 관리되고, 브라우저 업데이트를 통해 신뢰 목록이 갱신돼.
웹 브라우저의 역할
• 브라우저는 클라이언트가 접속하는 웹사이트가 신뢰할 수 있는지를 인증서를 통해 검증해.
• 브라우저는 내장된 루트 인증서 목록을 사용하여 CA의 신뢰성을 확인하고, 서버가 제공한 인증서가 그 목록에 있는지 검증해.
이 과정을 통해 웹 브라우저와 서버 간의 안전한 HTTPS 연결이 설정되고, 사용자의 데이터를 안전하게 보호할 수 있어.
결론:
HTTPS는 인터넷 보안을 위해 필수적인 프로토콜이야. SSL/TLS를 통해 데이터를 암호화하고, 서버의 신원을 인증하며, 데이터의 무결성을 보장하는 역할을 하지. 인증 기관(CA)은 HTTPS 통신에서 중요한 역할을 하며, 브라우저와 서버 간의 신뢰 관계를 설정해.
이미지 설명
이미지에 나와 있는 흐름은 HTTPS에서 사용되는 인증서 기반 통신의 과정을 설명하는 다이어그램으로 보여. 아래는 각 단계에 대한 설명이야:
1. 1번 (인증 요청): 사용자가 사이트에 접속하려 할 때, 브라우저는 사이트의 인증서를 요청해.
2. 2번 (인증서를 가져옴): 서버는 인증 기관(CA)으로부터 발급받은 인증서를 브라우저에 전송해.
3. 3번 (사이트 인증서 발급): 서버는 인증 기관으로부터 자신의 공개키가 포함된 인증서를 발급받아, 이를 사용자 브라우저로 보냄.
4. 4번 (브라우저 확인): 브라우저는 인증 기관의 공개키를 사용해 서버의 인증서가 유효한지 확인하고, 자신이 접속하려는 서버가 신뢰할 수 있는지 검증해.
5. 5번 (접속 요청): 브라우저는 서버에 접속을 요청해, 이때 세션 키를 설정하여 이후의 통신을 암호화할 준비를 해.
6. 6번 (발급된 인증서를 전달): 서버는 인증서를 브라우저에 보내고, 브라우저는 이 인증서로 서버와의 통신이 안전하게 이루어질 수 있음을 확인해.
7. 7번 (사이트 정보 확인): 서버의 공개키로 암호화된 데이터를 브라우저가 전달받고, 해당 데이터를 복호화하여 사이트 정보가 정확한지 확인해.
8. 8번 (서버 정보 공개): 브라우저는 서버의 인증서 정보를 기반으로, 서버의 신뢰성을 확인하고 사이트와 통신을 시작할 준비를 해.
9. 9번 (암호화 세션 설정): 이제 서버와 브라우저 간에 대칭키 기반의 암호화된 통신 세션이 설정돼, 모든 데이터는 암호화되어 전송돼.
10. 10번 (대칭키 암호화): 서버는 대칭키로 데이터를 암호화하여 브라우저로 보내며, 대칭키를 사용해 양방향 통신이 이루어져.
11. 11번 (대칭키로 암호화된 데이터 전송): 이 대칭키를 통해 이후 모든 데이터가 안전하게 암호화된 상태로 통신되며, 데이터를 해독할 수 있는 사람은 서버와 브라우저뿐이야.
이 이미지는 HTTPS에서 인증서 발급과 대칭키 기반의 암호화된 통신 과정을 시각적으로 표현한 다이어그램으로, 서버의 신뢰성을 보장하고, 데이터를 암호화하여 안전한 통신을 진행하는 과정을 잘 나타내고 있어.
'Network' 카테고리의 다른 글
HTTP Header, CDN 캐싱 전략, Cache-Control (3) | 2024.10.15 |
---|---|
HoL Blocking, Pipelining, Multiplexing (2) | 2024.10.10 |
CORS, WebSocket, 그리고 Base64 (6) | 2024.09.27 |
Http 프로토콜 (6) | 2024.09.27 |
UDP 소켓 프로그래밍 (0) | 2024.09.26 |