HTTP와 HTTPS
HTTP의 보안 문제
- 도청 가능
- 메시지가 중간에 변경되어도 알 수 없다.
- 완전성을 증명할 수 없기때문에 변조가 가능하며, 수신자는 이 사실을 알 수 없다
- 올바른 상대와 통신하고 있는지 알 수 없다.
- 구조가 단순한 HTTP는 현재 통신하고 있는 상대가 누구인지 확인하지 않으므로 상대방이 위장한건지 파악이 불가능하다.
HTTPS
HTTPS: HTTP + Secure

TCP,IP와 직접적으로 연결되어있던 HTTP 에다가

중간에 SSL/TLS 프로토콜을 끼워 넣어 중간에 보안 요소를 추가한게 HTTPS
SSL(Secure Socket Layer) / TLS(Transport Layer Security)
- SSL/TLS: 전송 레벨 암호 보안 계층으로, SSL/TLS 라는 프로토콜을 조합하여 안전한 통신로를 확립한다.
- SSL은 넷스케이프에서 발명되어 사용되다가 IETF의 관리로 바뀌며 TLS라는 이름으로 변경되었다.
대칭키(공통키 암호화 방식)
-
특징
- 송신자와 수신자는 같은 키를 공유한다
- 송신자와 수신자는 같은 키로 암호화하고 복호화한다.
- 공통키를 가지기 위해서는 키를 공유하는 과정이 필요
-
문제점
- 키를 공유하는 과정에서, 탈취 당할 가능성
- 키를 손에 넣을 누구라도 암호를 해독할 수 있다
비대칭키(공개키 암호화 방식)
- 특징
- 한 쌍의 키(비밀키+공개키)로 암호화와 복호화를 한다.
- 공개키로 평문을 암호화
- 비밀키(개인키)로 평문을 복호화
- 공개키로 암호화 된 것은 비밀키로만 복호화가 가능함
- 비밀키는 보낼 필요가 없음 (비밀키는 노출되면 절대x)
- 즉 공개키로 암호화된 암호문을 해독할 수 있는 사용자는, 개인키를 가지고 있는 소유자 뿐
비대칭키(개인키 암호화 방식)
- 특징
- 비밀키로 암호화 된 암호문은 공개키를 가진 누구나 복호화 가능하다.
- 왜 씀?
- 개인키는 유일하기 때문에 개인키로 암호화되면 식별이 가능하다
- 누가 메시지를 작성했는지 알려주는 역할
- 즉, 그 메시지가 위조되지 않았음을 증명할 수 있다.
대칭키 vs 비대칭키
- 대칭키
- 암호화와 복호화를 같은 키로
- 키를 공유하는 과정 필요 -> 노출되면 보안 망가짐
- 암호화/복호화 속도 빠름
- 비대칭키
- 암호화와 복호화를 다른 키로
- 키를 공유하는 과정이 불필요
- 암호화 복호화 속도 느림
대칭키 + 비대칭키
HTTPS에서는 대칭키와 비대칭키를 혼합해서 사용하는데, 공통키를 공개키로 암호화해서 안전하게 교환한다.
즉, 키를 통신하는 과정에서 키가 노출되어도 어차피 암호화되었으니까 상관x
공개키 암호화의 문제점
공개키는 말 그대로 공개키로, 먼저 서버에서 제공을 받아야하는데 여기서 문제가 발생
공개키가 진짜인지 아닌지를 증명할 수 없다.
중간에 위조되었어도 알 방법이 x
-> CA의 필요성
CA(Certificate Authority)
"믿을 만한 제 3자가 보장"
- 절차
- 서버는 인증 기관에 서버의 공개키와 사이트 정보를 전송한다.
- 인증 기관은 사이트를 검증한 후 인증 기관의 개인키로 서명한다. -> SSL 인증서
- 서버의 공개키 사이트 정보를 인증기관의 비밀키로 암호화
- 인증 기관은 사이트 인증서(SSL 인증서)를 서버에게 전송한다
- 클라이언트가 공개키를 요청할 때, 서버는 공개키 대신 SSL 인증서를 제공
- 공개키를 얻기 위해 SSL 인증서를 인증기관의 공개키를 통하여 복호화
- 인증 기관의 공개키를 통하여 복호화가 가능하다면, 위조되지 않은 사이트임을 확인 가능(= 신뢰할 수 있는 사이트)
HTTPS의 통신 흐름
- 클라이언트가 서버에 암호화에 필요한 정보들을 보내고, 인증서를 요구한다.
- 서버는 선택된 암호 정보와 인증서를 전송한다.
- 클라이언트는 서버가 신뢰할 수 있는 사이트임을 확인했다면(with CA), 공통키로 사용할 Pre-Master-Secret키를 생성한다.
- SSL 인증서를 통하여 얻은 공개키로 pre-Master-secret키(공통키)를 암호화 하여 전송한다.
- 서버는 개인키로 복호화하여 공통키를 획득한다
- 클라이언트와 서버간에 안전하게 공통키가 확보 되고(SSL에 의해서 접속이 확립), 통신은 보호된다.
- 대칭키 암호화 방식으로 메세지를 암호화하여 HTTP로 송수신한다.