본문 바로가기

Web

HTTPS & SSL 인증서 기초 정보



개인 학습을 위한 정리입니다. 만약 수정할 부분에 있다면 댓글로 알려주시면 감사하겠습니다 ^^




HTTPS

- Hyper Text Transfer Protocol의 약자로 HTML을 전송하기 위한 웹 통신규약을 의미한다.

- HTTP는 암호화가 처리되지 않은 채 데이터가 전송되기 때문에 서버와 클라이언트간의 정보가 노출되기 쉽다. (Ex 로그인페이지, 정보수정, 중요 데이터 문서 열람 등등)

여기서 S가 붙으면 Secure이란 뜻으로 보안이 강화된 HTTP를 말한다. 즉 HTTP에 보안에 대한 기능강화 및 결합한 것을 HTTPS라 부른다.





SSL/TLS 프로토콜 레이어 구조






- TLS는 전송계층의 암호화 방식이기 때문에 HTTP뿐만 아니라 FTP, XMPP등 응용 계층(aap layer)프로토콜의 종류에 상관없이 사용할 수 있다는 장점을 가지고 있으며 인증, 암호화, 무결성을 지원한다.




SSL 디지털 인증서


- SSL 디지털 인증서는 클라이언트와 서버간의 통신을 제 3자가 보증해주는 전자화된 문서로 클라이언트가 서버에 접속한 후 서버는 클라이언트에게 인증서 정보를 전달하며 클라이언트는 이 정보를 확인 후 다음 절차를 수행하게 된다.


- 통신 내용 노출 방지

- 접속할 서버의 신뢰도 판단

- 통신 내용의 악의적 도용 및 변경 방지




키(Key)


-암호를 만드는 것을 의미하는 암호화에 기준이 되는 데이터를 얘기하며 키에 적용된 암호화를 이전 상태로 돌리는 것을 복호화라고 얘기한다.

키가 없는 사람은 본래 데이터를 알 수 없는 방식이 암호화의 기본 구조라 볼 수 있다.




암호화 기법 


대칭키


- 암호화/복호화 두 기능을 구현할 때 양 쪽 동일한 키를 가지고 있어야 한다는 뜻




공개키


- 대칭키의 단점을 보완한 방식(암호화,복호화에 사용되는 키의 도난/유출의 가능성)

- 공개키는 2개의 키를 가지고 있으며 A라는 키로 암호화시 B라는 키로 복호화를 해야하며 B라는 키로 암호화를 했다면 A 키로 복호화를 해야하는 방식이다.

그 두개의 키중 하나는 비공개키(Private key)라고 하며 남은 하나는 공개키(public key)라고 지정한다. 비공개키는 자기 자신만 보관하며 공개키는 타인에게 제공을 하고 공개키를 제공받은 타인은 공개키를 이용해 정보를 암호화 시킬 수 있다. 암호화한 정보를 다시 비공개키를 가지고 있는 사람에게 전송하며 비공개 키를 가진 사람은 전달 받은 키를 이용해 정보를 복호화 할 수 있다. 이 과정속에서 공개키로 암호화를 할 수 있지만 비공개키를 모르면 복호화를 할 수 없기 때문에 보다 대칭키보다 안전한 방식이다.




용어


CA


 - 인증서의 역할은 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지 보장하는 기능을 한다

 - CA는 아무 기업이나 할 수 있는 것은 아니고 신뢰성이 엄격하게 공인된 기업만 참여할 수 있으며 SSL을 통해 암호화된 통신을 제공하려는 서비스는 CA를 통해 인증서를  구입해야한다.




사설 인증기관


- 개발이나 사적인 목적을 위해 SSL 암호화 기능을 이용하려 한다면 자신이 직접 CA역할을 할 수 있으며 사설 CA인증서 사용시 브라우저는 빨간색 HTTPS를 표기한다.




전자 서명


- 비공개 키의 소유자는 비공개키를 이용해 정보를 암호화 한 후 공개키와 함께 암호화된 데이터를 전송한다.

정보와 공개키를 받은 사람은 공개키를 이용해 암호화된 정보를 복호화 하는데 중간에 공개키가 유출된다면 의도하지 않은 다른 사람에게 데이터가 복호화 될 위험이 있지만 이러한 방식의 목적은 암호화된 데이터를 공개키로 복호화할 수 있는 점은 데이터 자체가 공개키와 연계된 비공개키에 의해 암호화가 되었다는것을 의미 하며 공개키가 데이터를 제공한 사람의 신원을 보장해주게 되는 것을 의미한다.




SSL 인증서의 특성


1. 클라이언트가 접속한 서버가 신뢰 할 수 있는 서버인 것을 증명 및 보장

2. SSL 통신에 사용할 공개키를 클라이언트에게 제공




SSL 인증서 내용


- 서비스의 정보(인증서를 발급한 CA, 서비스의 도메인 등등)

- 서버 측 공개키(공개키의 내용, 공개키의 암호화 방법 등)




SSL인증서가 서비스(서버)를 보증하는 방법


1. 웹 브라우저가 서버에 접속시 서버는 제일 먼저 인증서를 제공

2. 브라우저는 이 인증서를 발급한 CA가 자신이 내장한 CA의 리스트에 있는지 확인

3. 서버를 통해 다운 받은 인증서가 내장 리스트에 포함되어 있다면 브라우저는 가지고 있는 CA의 공개키를 이용해 인증서 복호화 처리를 한다.

4. 다시 말해 CA공개키를 이용해 인증서를 복호화할 수 있는 점은 이 인증서가 CA의 비공개키에 의해 암호화 처리가 된 것을 의미한다.

 



SSL의 동작방법


- 암호화된 데이터를 전송하기 위해 공개키와 대칭키를 혼합하여 사용한다. 클라이언트와 서버가 주고 받는 실제 정보는 대칭키 방식으로 암호화하고 대칭키 방식으로 암호화된 실제 정보를 복호화 할때 사용하는 대칭키는 공개키 방식으로 암호화하여 클라이언트와 서버간 전송이 이뤄진다.


실제 데이터 : 대칭키 (클라이언트와 서버가 공통적으로 가지고 있어야할 대칭키를 공유할 때 공개키 암호화 기법을 사용하여 주고받는다)

대칭키의 키 : 공개키




컴퓨터 대 컴퓨터 간의 네트워크를 이용한 통신 3단계


- 악수(가장 중요한 부분) - 전송(세션 : 실제 데이터가 오가는 구간) - 세션종료




악수란?


- 실제 데이터통신을 주고 받기 전에 두 개의 실체간 확립된 통신 채널 변수등 조건을 합의하는 과정




과정


1. 클라이언트가 서버에 접속(서버는 클라이언트의 랜덤 데이터, 클라이언트의 암호화 방식, 세션아이디 등 정보 수신<Client Hello> /

   클라이언트는 서버의 랜덤데이터, 서버가 선택한 암호화 방식, 인증서 등 수신<Server Hello>) 

2. 서버는 서버가 사용하는 인증서의 정보를 전달을 하며 ServerHello를 종료

3. 클라이언트는 암호화 통신에 사용할 키를 생성 후 키 교환 

4. 클라이언트는 암호화 통신에 사용 가능한 알고리즘 및 해쉬 알고리즘을 서버로 전달

5. 전달 받은 알고리즘 목록을 교환 후 대칭 키를 서로 보유

6. SSL 세션 준비 완료, 암호화 통신 




과정의 핵심

- 서버의 인증서를 클라이언트에게 전송

- 클라이언트가 해독할 수 있는 암호화 기법(키)을 공유




세션


- 정보를 상대에게 전송하기 전 session key 값을 이용해 대칭키 방식으로 암호화 한다는 점이며 암호화된 정보는 상대방에게 전송되고 상대방 또한 session key 값을 알고  있기 때문에 복호화도 가능하다.

- 공개키 방식은 많은 파워를 사용하며 서버의 비용 초과 및 서버의 효율이 떨어지기 때문에 속도는 조금 느리지만 데이터를 안전하게 주고 받을 수 있는 공개키 방식으로 대    칭키를 암호화 시킨 후 실제 데이터를 주고 받을때는 대칭키를 이용한다.




세션종료

- 데이터 전송이 끝나면 SSL 통신이 끝났음을 알려주며 사용했던 sessin key는 폐기시킨다.

 





- 출처 생활코딩(https://opentutorials.org/course/228/4894) / 깃북(https://lesstif.gitbooks.io/web-service-hardening/content/author.html)



'Web' 카테고리의 다른 글

웹 애플리케이션 게시판 페이지처리  (0) 2019.05.09
인터넷과 웹의 개념  (1) 2019.03.29