1.https란
HTTP는 포스팅한 것이 있으니 참조를 하자 (다른 사람걸 참조하는게 더 좋다!)
HTTP는 정보를 텍스트로 주고 받는다. 이때 네트워크에서 전송신호를 가로채는 경우에는 데이터 유출이 발생할 수 있다.
HTTP는 통신 프로토콜이다. HTTPS 역시 통신 프로토콜이다. 대신 보안성이 더 좋아진다.
HTTPS는 HTTP에 Secure Socket 이 추가된 것이다. HTTPS의 정확한 이름은
'Hypertext Transfer Protocol Over Secure Socket Layer' 이다. 여기서 굵직한 글자를 합치면 SSL이 된다. HTTPS는 SSL 위에서 작동하는 프로토콜이다.
그냥 보안만 좋은 프로토콜이겠거니 할 수도 있지만 HTTP / HTTPS 여부는 검색엔진에서 도메인을 평가할 때 보는 요소 중 하나라고 한다. 보안도 보안이지만 웹 호환성이나 통신 무결성과 같은 다른 개발적인 요소나 이젠 마케팅과 같은 그 외의 요소때문에라도 바뀌고 있는 추세라고 한다.
HTTPS 사용시 서버와 클라이언트 사이의 모든 통신 내용은 암호화가 된다. 암호화 과정이 있다면 복호화 과정도 있다.
암호화와 복호화는 키를 통해 이루어진다.
- 웹서버가 키 하나를 정해 페이지를 암호화해서 사용자의 웹 브라우저로 보낸다.
- 사용자의 웹 브라우저에서는 키를 통해 페이지를 복원한다.
암호화한 키는 특정 사용자에게만 알려지도록 한다. 그리고 SSL 프로토콜을 통해 세션 데이터를 암호화한다.
HTTP와 다르게 HTTPS의 기본 TCP/IP 포트는 443 이라 한다.
2.암호화의 방식
공개키 방식과 대칭키 방식이 함께 사용된다.
대칭키는 공통키라고도 한다. 이름과 같이 대칭키 하나로 암호화와 복호화를 한다.
그리고 이런 공통키를 처음에 통신을 할 때 같이 담아서 전달해야된다. 공통키는 탈취되면 안되므로 공개키를 통해서
처음에 전달을 한다.
공개키는 비대칭키라고도 한다. 서로 다른 두개의 키 페어를 사용한다. 각각 비밀키(개인키)와 공개키로 나뉜다.
암호를 보내는 측은 상대의 공개키를 통해 암호화한다. 그리고 암호화된 정보를 받아들인 상대는 자신의 비밀키를 통해 복호화를 한다. 이렇게 하면 이 방식은 암호를 푸는 비밀키가 전달되는 과정이 없으므로 탈취의 염려가 없다.
비대칭키는 대칭키에 비해 전달속도가 많이 느리고 컴퓨터에 많은 부하를 준다. 때문에 공개키와 대칭키를 같이 쓴다.
3. SSL프로토콜
앞서 말했듯 SSL 은 Secure Socket Layer 이다. SSL에 대해서 알아보다 보면 TLS라는 녀석도 많이 보일텐데 이 녀석의 이름은 Transport Layer Security 이다. SSL은 1995년에 만들어졌고 TLS 는 1999년 SSL을 업데이트한 프로토콜이다. 그렇다고 TLS 가 엄청난 변화가 있는것도 아니라 한다. Internet Engineering Task Force(IETF) 가 SSL 에 대한 업데이트를 제안했고 SSL를 처음 만든 Netscape가 업데이트 이후 손을 떼면서 이름을 TLS로 바뀐것이다.
결론적으로 , 지금 쓴다는 프로토콜은 왠만하면 TLS라는 것이다. 실제로 SSL을 웹 브라우저는 많이 지원하지 않는다. 그럼에도 TLS 라는 말 대신에 SSL 이라는 표현을 일반적으로 쓴다. 이유는 별거 없이 그냥 인지도 때문이다. 그럼 SSL은 무엇을 하는 프로토콜일까
SSL의 역할은 대표적으로 이렇다.
- 웹에서 전송되는 데이터의 암호화 (2.에서 말하였다.)
- 디지털 인증서를 이용한 인증
- 핸드셰이크라는 인증 프로세스의 실행
- 데이터 무결성을 위해 데이터에 디지털 서명을 한다.
4. SSL 인증서
SSL인증은 SSL인증서를 가지고 있는 웹사이트에서만 실행이 된다. SSL인증서는 클라이언트와 서버간의 통신간 안전을 제3자가 인증해주는 전자화된 문서이다. 또한 SSL 인증서에 공개 키가 들어있다. 개인 키는 자신의 웹 서버에 저장을 해놓는다.
- 클라이언트가 서버에 접속하면 서버는 클라이언트에게 인증서 정보를 전달한다.
- 클라이언트는 인증서 정보가 신뢰할만한 건지 검증하고 공개키와 공통키를 사용해 정보를 암호화한다.
이런 SSL 인증서 발행은 아무나 할 수 있는게 아니다. CA라고 불리는 인증기관에서 발행을 한다.
CA란 Certification Authority 의 약자이다. CA는 인증서의 발급을 하면서 클라이언트가 접속한 서버가 의도한 서버인지 확인하는 역할을 한다. 이러한 역할들을 하는 기업들은 엄격하게 공인된 기업만 참여할 수 있다.
그리고 SSL의 인증서를 발급받고 싶으면 공인된 기업에게서 인증서를 구입해야한다. 물론 cloudFlare 같은 무료 인증서나 다른 사설 CA인증서 도 존재한다. 하지만 공인된 인증서를 사용하지 않을경우 이렇게 경고가 뜰 수도 있다.
인증서에는 공개키외에도 서비스의 정보 또한 담고 있다. 인증서를 발급한 CA의 정보라던가, 서비스의 도메인등이 이에 해당된다. 이런 정보들은 클라이언트가 접속을 의도한 서버가 맞는지 여부를 판단하기 위해 있는 정보이다. 이런 정보는 CA로부터 인증서를 구입할 때 CA측에다 제출을하게 된다.
그리고 브라우저또한 CA의 리스트를 미리 가지고 있어서 브라우저는 이미 각 공인된 CA의 공개키를 가지고 있다. 그래서 복호화를 할때에는 미리 브라우저에 내장된 CA의 공개키를 가지고 복호화를 한다. 각 CA의 공개키는 하나밖에 존재하지 않으며, 공개키로 복호화를 한다는 것으로 이 사이트가 보안을 인증하고 있는 뜻이다.
참고자료
생활코딩
https://opentutorials.org/course/228/4894
cloudFlare 학습 센터
https://www.cloudflare.com/ko-kr/learning/ssl/what-is-ssl/
날도의 기술 블로그, HTTP 분석 실습
https://naldo627.github.io/2019/04/08/http-analyze/
HTTPS란 무엇일까
https://devlog-wjdrbs96.tistory.com/289
EunJeongKwak 님 블로그 HTTPS란?
https://rachel-kwak.github.io/2021/03/08/HTTPS.html
'웹 > 네트워크 기본' 카테고리의 다른 글
네트워크의 구성 (0) | 2022.03.16 |
---|---|
네트워크란? , 통신의 종류는? (0) | 2022.03.10 |
http의 메소드 (0) | 2022.02.24 |
http 란 무엇일까 (0) | 2022.02.13 |
이미지가 표시가 안될 때 (0) | 2020.11.09 |