HTTP(HyperText Transfer Protocol)는 WWW상에서 정보를 주고받는 프로토콜이다.
HTTP는 웹 브라우저와 웹 서버가 웹 페이지와 같은 데이터나 자원을 주고받을 때 사용하는 통신 규약이다.
하이퍼텍스트로 텍스트의 교환이기 때문에 악의적인 누군가가 네트워크에서 신호를 가로채면 내용이 노출될 수 있다.
이러한 보안 문제점을 해결하기 위해 HTTP에 SSL을 추가한 것으로 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 해주고, 클라이언트와 서버가 민감한 정보를 주고받을 때 정보가 유출되는 것을 막아준다.
인터넷 상에서 정보를 암호화하는 SSL프로토콜을 이용하여 웹 브라우저와 서버가 데이터나 자원을 주고 받는 통신 규약.
TLS이란 : 전송 계층 보안이라고 한다. 콤퓨터 네트워크를 통해 안전한 통신을 제공할 수 있도록 설계된 암호화 프로토콜이다.
이전 SSL(Secure Sockets Layer) 프로토콜의 후속 버전이다.
주 목표는 웹 브라우저와 웹 서버 등 두 통신 App 간에 교환되는 데이터의 개인정보 보호와 무결성을 보장하는 것이다.
요청을 보내고 응답을 받는 두 주체만 HTTP 요청 및 응답을 읽을 수 있게 암호화한다.
중간자 공격(MITM) : 공격자가 사용자의 인터넷 서버와 해당 인터넷 트래픽의 목적지 사이에 끼어들어 데이터 전송을 가로채는 공격. -> 데이터 탈취
키A를 사용해서 암호화를 했다면 키A로 복호화를 하는 방식이다.
암복호화할 때 사용하는 키가 동일한 경우, 1개의 키를 사용한다.
ex) 자물쇠로 잠근 키 한개로만 그 자물쇠를 다시 열 수 있다. 잠그로 여는 것이 하나의 열쇠로만 가능.
장단점 : 하나의 키로만 해결해서 간편하지만 이 키를 분실하거나 도난당하면 내가 암호화한 데이터를 누군가가 복호화하여 볼 수가 있다.
공개키, 개인키 2개의 키를 한 쌍으로 각각 암호화 복호화를 하는데 사용한다. (암복호화에 서로 다른 키를 사용.)
개인키를 만들고 여기서 공개키를 파생하여 한 쌍의 키를 만들어서 키페어라고 부른다.
같은 쌍이 아닌 다른 키를 사용하려 하면 암호화/복호화가 불가능하다.
즉 키A를 통해 암호화한 내용은 키A를 이용해 복호화가 불가능하고 A와 쌍을 이루는 키B를 사용해야만 복호화가 가능하다.
공개키: 사람들에게 공개된 키, 정보를 암호화할 수 있다 (주로 데이터를 암호화하는 데 사용)
공개키 암호화는 서로 다른 2개의 키가 한 쌍으로 작동한다.
공개키로 암호화한 데이터는 반드시 그에 상응하는 개인키로만 복호화할 수 있다.
개인키로 암호화한 데이터는 그에 상응하는 공개키로만 복호화할 수 있다.
Public Key로 암호화 하는 경우
보안성
공개키를 통해 암호화된 데이터는 해당 개인키 없이는 절대 풀 수 없으므로, 네트워크를 통한 도청 위험으로부터 데이터를 안전하게 보호할 수 있다.


장단점 : 안전하게 데이터 전달하고 데이터를 누가 전송했는지 알 수가 있다. 하지만 연산 속도가 느리다.
CA를 통해서 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지를 인증해준다.
CA의 공개키는 브라우저에 제공되고, CA의 비밀키로 서버의 공개키와 서버의 정보를 암호화하여 인증서의 형태로 전달한다. 서버에서 보낸 인증서는 CA의 개인키로 암호화를 하고 공개키로 복호화를 한다.

A에서 B로 접속을 요청한다.
B는 A에게 자신의 공개키를 전송한다.

A는 자신의 대칭키를 B에서 전달받은 B의 공개키로 암호화한다. 이 암호화한 대칭키를 B에게 전달한다.

B는 A의 대칭키를 자신의 개인키로 복호화한다. 이 복호화 결과로 A의 대칭키를 얻어낸다.

이 얻어낸 대칭키를 활용해서 A와 B는 안전하게 통신한다.

서버는 로컬 컴퓨터에게 공개키를 전달한다. 로컬 컴퓨터는 공개키를 통해 비밀번호를 암호화하여 서버에 전달한다. 서버는 공개키로 암호화된 문장을 개인키를 통해 복호화해 비밀번호를 알아낸다.
웹 서버에서 인증기관(CA)에게 사이트 정보와 사이트 공개키를 전송한다. (사이트 인증서는 인증기관에서 사이트에게 발급하는 문서이다.)
인증기관에서는 사이트 인증서를 발급하기 전 먼저 전달받은 데이터를 검증한다.

성공적으로 검증이 완료되면 사이트 인증서르 만들기 위해 이 데이터를 자신의 개인키로 서명한다.

서명하면 사이트 인증서가 생성되고 인증서를 사이트에게 전달한다.


사용자가 사이트에 접속하면 사이트는 자신이 신뢰할 수 있는 사이트 임을 증명하기 위해 사용자에게 자신의 인증서를 전달한다.
사용자는 브라우저에 내장되어 있는 인증기관 공개키로 사이트 인증서를 복호화하여 검증한다.
사이트 인증서를 해독하면 사이트 정보와 사이트 공개키를 얻을 수 있다.



보안 서버란, 홈페이지 접속 시 수신되는 정보를 암호화는 서버를 뜻합니다. 보안 서버는 일반적인 로그인 정보 및 전자상거래 시 전송되는 패킷값을 암호화하여 외부의 공격자부터 데이터를 보안하기 위해 사용됩니다. 암호화 대상은 인터넷 상에서 송수신되는 정보로, ID와 패스워드, 개인정보, 계좌 정보 등, 유출 시 자칫 악용되어 사용될 수 있는 정보들이 해당됩니다.
몰랐던 것
공개키로 암호화할 경우 개인키로만 복호화할 수 있고, 반대로 개인키로 암호화할 경우 공개키로만 복호화할 수 있다.
참고 자료
🔗 https://opentutorials.org/course/228/4894 - 생활 코딩 HTTPS와 SSL 인증서
🔗 https://stackoverflow.com/questions/187655/are-https-headers-encrypted - HTTPS 헤더는 암호화되어 있나요?