
최근에 본 면접에서 HTTPS에 대해 물어봤고 HTTP와 HTTPS의 차이와 원리, 적용까지 정리해보았습니다.
우리는 원하는 요청이 있을 때 웹 브라우저를 통해 서버에게 요청을 보냅니다. 요청과 응답에는 약속한 규칙이 있습니다. 이를 프로토콜이라고 하며 인터넷상에서는 HTTP 프로토콜 방식이 널리 사용되고 있습니다.
요청은 아래와 같습니다.
GET /main HTTP/1.1 // 1.
// 2.
Host: google.com
User-Agent: Mozilla/5.0
Accept-Language: ko-KR
요청에 대해 정상적으로 아래와 같은 응답을 받게됩니다.
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2023 14:28:02 GMT
Server: Apache
Content-Type: text/html
<html>
...
</html>
첫 줄은 요청과 마찬가지로 URL 정보가 나와있습니다.
두 번째 줄부터는 요청에 대한 응답메시지가 담겨있습니다. 위의 예시의 경우 응답시에 HTML 형태의 데이터를 돌려주고있는데, JSON 방식 등 다양한 형태로 응답할 수 있습니다.
HTTP 통신은 암호화없이 데이터로 통신하기 때문에 보안에 취약합니다. 이를 위해 연결을 SSL이나 TLS 프로토콜을 이용하여 암호화하여 사용합니다. 이를 HTTPS라고 합니다.
SSL 프로토콜은 보안상의 취약점이 있어서 요즘 대부분의 HTTP 암호화는 TLS 프로토콜을 이용합니다.
CA(Certification Authority)에서 받는 인증서로부터 상대 서버의 서비스 정보, 공개키, 지문, 디지털 서명 등의 정보를 통해서 통신하고 있는 서버가 신뢰할 수 있는지를 알려줍니다.
대칭-비대칭 암호화 조합으로 데이터를 보호합니다. 비대칭키로 대칭키를 공유하고 실제 통신할 때는 대칭키를 이용해서 암호화 및 복호화를 합니다.
통신 과정에서 데이터의 무결성을 확인합니다.
https가 적용되면 443번 포트로 접속해야합니다.
HTTPS가 통신 방식을 이해하기 위해서는 용어 이해가 필요합니다.
여기서 키는 암호화를 위해 값이 변조되는데 그 방식들에 대해 정리하겠습니다.
암호화와 복호화 방식이 동일한 것을 의미합니다.
암호화와 복호화 방식이 다른 것을 의미합니다.
암호화와 복호화에 사용되는 암호화 방식이 다를 경우, 암호화를 위한 키의 종류는 공개키와 개인키가 있습니다.
서버가 인증서를 통해 클라이언트(브라우저)에 제공하는 키로써 데이터를 암호화하는데 사용됩니다. 공개키라는 이름처럼 접근 대상에 대해 열려있다.
암호화된 데이터를 복호화하는데 사용하는 키로써 서버에 저장되는 암호키입니다.
서버에서 HTTPS 프로토콜 사용을 위해 CA(인증 기관)에서 SSL 인증서를 받아야합니다.
1. 서버는 공개키와 개인키 쌍을 만듭니다.
2. 서버는 인증서 발급을 위해 인증서 서명 요청(CSR)을 생성해야하는데 그 안에는 서버의 공개키와 정보가 있습니다.
3. 이 정보를 Let's Encrypt와 같은 신뢰할 수 있는 여러 인증기관에 웹사이트를 통해 제출합니다.
4. 인증 기관은 공개키와 비밀키를 생성하고 비밀키를 이용해서 암호화한 인증서를 발급합니다.
공개키 암호화 방식을 사용해서 안전한 통신을 확인하고 세션키를 통해 데이터를 암호화하여 통신합니다.
클라이언트가 서버와 통신하기 위해 통신이 가능한지 확인하는 과정입니다.
안전한 통신을 하기 위해 검증하는 과정입니다.
1. Client Hello : 클라이언트가 서버와의 연결을 위해 아래의 정보를 가진 패킷을 서버에 요청합니다.
패킷에 포함된 정보 : 선택 가능한 프로토콜 버전, 암호화 알고리즘 종류 등
2. Server Hello: Client Hello에 응답하는 패킷으로 서버가 선택한 프로토콜 버전, 암호화 알고리즘 정보가 있습니다.
3. Certificate : 서버가 클라이언트에게 인증 정보를 담아서 응답합니다.
Certificate에는 signature algorithm, public key info(공개키) 등이 포함되어 있습니다.
https://www.cloudflare.com/ko-kr/learning/ssl/how-does-public-key-encryption-work/
https://docs.tosspayments.com/resources/glossary/http-protocol
velog가 자꾸 저장이 되다가 안되다가 데이터가 맞다가 안 맞다가 해서 정리 아래 링크에 백업용도로 만들었습니다. 내용이 이상하면 아래 링크를 확인해주시거나 댓글로 알려주시면 velog 내용 수정하겠습니다.
https://github.com/jaeeunjeong/Today-I-Learned/tree/master/Network