-
인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약
HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다.
이런 보안 문제를 해결해주는 프로토콜이 'HTTPS'
- 도청이 가능하다
- 평문으로 통신하기 때문에 도청이 가능하다
- 이를 해결하기 위해서 통신자체를암호화(HTTPS)하거나 데이터를 암호화 하는 방법등이 있다
- 데이터를 암호화 하는 경우 수신측에서는 보호화 과정이 필요하다
- 위장이 가능하다
- 통신 상대를 확인하지 않기 깨문에 위장된 상대와 통신할 수 있다
- HTTPS는 CA 인증서를 통해 인증된 상대와 통신이 가능하다
- 변조가 가능하다
- 완전성을 보장하지 않기 때문에 변조가 가능하다
- HTTPS는 메세지 인증 코드(MAC), 전자 서명등을 통해 변조를 방지 한다
-
인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약
HTTPS는 텍스트를 암호화한다. (공개키 암호화 방식으로!) : 공개키 설명
-
애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해 공개키와 개인키를 만든다.
-
신뢰할 수 있는 CA 기업을 선택하고, 그 기업에게 내 공개키 관리를 부탁하며 계약을 한다.
CA란? : Certificate Authority로, 공개키를 저장해주는 신뢰성이 검증된 민간기업
-
계약 완료된 CA 기업은 해당 기업의 이름, A서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고, 해당 인증서를 CA 기업의 개인키로 암호화해서 A서버에게 제공한다.
-
A서버는 암호화된 인증서를 갖게 되었다. 이제 A서버는 A서버의 공개키로 암호화된 HTTPS 요청이 아닌 요청이 오면, 이 암호화된 인증서를 클라이언트에게 건내준다.
-
클라이언트가
main.html
파일을 달라고 A서버에 요청했다고 가정하자. HTTPS 요청이 아니기 때문에 CA기업이 A서버의 정보를 CA 기업의 개인키로 암호화한 인증서를 받게 된다.
CA 기업의 공개키는 브라우저가 이미 알고있다. (세계적으로 신뢰할 수 있는 기업으로 등록되어 있기 때문에, 브라우저가 인증서를 탐색하여 해독이 가능한 것)
-
브라우저는 해독한 뒤 A서버의 공개키를 얻게 되었다.
-
클라이언트가 A서버와 HandShaking 과정에서 주고받은 난수를 조합하여 pre-master-secret-key 를 생성한 뒤, A서버의 공개키로 해당 대칭키를 암호화하여 서버로 보냅니다.
-
A서버는 암호화된 대칭키를 자신의 개인키로 복호화 하여 클라이언트와 동일한 대칭키를 획득합니다.
-
클라이언트, 서버는 각각 pre-master-secret-key를 master-secret-key으로 만듭니다.
-
master-secret-key 를 통해 session-key를 생성하고 이를 이용하여 대칭키 방식으로 통신합니다.
-
각 통신이 종료될 때마다 session-key를 파기합니다.
HTTPS도 무조건 안전한 것은 아니다. (신뢰받는 CA 기업이 아닌 자체 인증서 발급한 경우 등)
이때는 HTTPS지만 브라우저에서 주의 요함
, 안전하지 않은 사이트
와 같은 알림으로 주의 받게 된다.