HTTPS란 보안이 강화된 HTTP로 Hyper Text Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure 등의 줄임말이라고 한다.
HTTPS 는 HTTP의 치명적인 단점인 데이터가 암호화 되지 않고 그대로 전송된다는 것을 보완하기 위해 등장했다.
HTTP는 데이터를 전송할 때 암호화하지 않기 떄문에 중간에서 해당 데이터를 도청할 경우와 같은 보안 문제가 생길 수 있다.
HTTP의 보안 취약점은 다음과 같다.
1. 도청 가능
HTTP request와 response 통신 내용은 암호화되지 않아 평문으로 HTTP 메시지를 보내게 되기 때문에 도청이 가능하다.
2. 위장 가능
HTTP request나 response는 통신 상대를 확인하지 않는다. 즉, 서버나 클라이언트가 바뀌어도 알 수 없는 것이다.
3. 변조 가능
정보의 정확성, 즉 완전성을 증멸할 수 없기에 정보가 정확한지 아닌지 확인할 수가 없고, 이는 곧 변조를 가능케한다.
HTTP가 완전성을 증명할 수 없다는 것은 request나 response를 수신하기 전에 변조가 되어도 알 수 없다는 것이다.
클라이언트가 받은 데이터가 서버 상에 있는 데이터와 같은 것인지 아닌지 확인할 수 없는 것이다.
이러한 HTTP의 보안 취약성 때문에 HTTPS가 등장하게 된다.
HTTPS 는 Secure Socket Layer, 즉 SSL이라는 프로토콜을 사용해 주고 받는 정보를 암호화한다. 지금은 TLS(Transport Layer Security)와 같이 SSL의 취약성을 보완한 프로토콜도 등장해 HTTP over TLS와 같이 TLS를 지칭하기도 한다.
SSL은 비대칭키 방식과 대칭키 방식을 통해 암호화를 진행한다.
comodosslstore에서 설명하는 SSL/TLS 클라이언트 인증 방식은 위와 같다.
1. 클라이언트가 서버에 접속한다. Client Hello
클라이언트 측에서 생성한 랜덤 데이터, 암호화 방식, 세션 아이디 등을 전달한다.
2. 서버 응답 Server Hello
서버측에서 생성한 랜덤 데이터, 서버가 선택한 암호화 방식, 인증서 등을 전달
3, 4, 5, 6. 클라이언트 인증
클라이언트는 서버의 인증서가 CA에 의해서 발급된 것인지 확인하기 위해 클라이언트에 내장된 CA 리스트를 확인한다. 리스트에 없으면 경고 메시지를 출력한다. 인증서가 CA에 의해서 발급된 것인지 확인하기 위해서 클라이언트에 내장된 CA의 공개키를 이용해 인증서를 복호화한다. 복호화에 성공했다면 인증서는 CA의 개인키로 암호화된 문서임이 임시적으로 보증되었다는 것이기에 전송한 서버를 신뢰할 수 있다.
또 클라이언트느 2번 단계에서 받은 서버의 랜덤 데이터와 1번의 랜덤 데이터를 조합해 pre master secret이라는 키를 생성하게 된다. 이 때 사용할 암호화 기법은 대칭키이기 때문에 pre master secret 값은 제 3자에게 절대로 노출되어서는 안된다.
이 pre master secret 키를 서버의 공개키로 암호화해서 서버로 전송하면 서버는 자신의 비공개키로 안전하게 복호화할 수 있다. 이때 서버의 공개키는 서버로부터 받은 인증서 안에 들어있어서 이를 통해 pre master secret값을 암호화한 후 서버로 안전하게 전송할 수 있는 것이다.
이렇게 전송하게 되면 서버는 클라이언트가 전송한 pre master secret 값을 서버의 비공개키로 복호화한다. 이렇게 클라이언트와 서버 모두 pre master secret값을 공유하게 되었기에 이를 master secret 값으로 만든다. master secret 값은 session key를 생성하는데 이 session key 값을 이용해 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화한 후에 주고 받게 된다. 이렇게 해서 세션키를 클라이언트와 서버가 모두 공유하게 된다.
7, 8. 클라이언트와 서버 핸드쉐이크 종료 알림
여기서 세션은 실제로 서버와 클라이언트가 데이터를 주고 받는 단계이다. 이 단계에서 핵심은 정보를 상대방에게 전송하기 전에 session key값을통해 대칭키 방식으로 암호화한다는 것이다.
또한 공개키와 대칭키를 조합해서 사용하는 이유는 공개키 방식이 많은 컴퓨터 파워를 사용하기 때문이다. 반대로 대칭키는 암호를 푸는 열쇠인 대칭키를 상대에게 전송해야 하는데, 암호화가 되지 않은 인터넷을 통해 키를 전송하는 것은 위험하다. 이런 점 때문에 속도는 느리지만 데이터를 안전하게 주고 받을 수 있는 공개키 방식으로 대칭키를 암호화하고, 실제 데이터를 주고 받을 때는 대칭키를 이용해서 데이터를 주고 받는 것이다.
[정보보안] SSL(Secure Socket Layer) 이란 (tistory.com)
SSL/TLS Client Authentication – Know How it Works (comodosslstore.com)