본문 바로가기

Coding/기타

HTTPS와 SSL 인증서

* HTTP란

- HTTP는 HyperText Transfer Protocol로 www 상에서 정보를 주고 받는 프로토콜이다

- HTTP는 웹브라우저(client)와 서버간의 웹페이지같은 자원을 주고 받을 때 쓰는 통신 규약이다.

- http는 텍스트로 된 html 페이지를 교환하는 것으로, 누군가 네트워크에서 신호를 가로채어 본다면 내용이 노출된다.

즉, 암호화되지 않은 방법으로 데이터를 전송하여 악의적으로 가로채거나 데이터 변조의 가능성이 있다.

 

* HTTPS란

- 보안이 강화된 HTTP이다. 즉, https는 http의 하부에 SSL과 같은 보안 계층을 제공함으로써 동작한다.

- 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer) 프로토콜을 이용하여 웹브라우저(클라이언트)와 서버가 데이터를 주고 받는 통신 규약이다.

- 모든 http 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다.

 

* SSL 디지털 인증서

- 클라이언트와 서버간의 통신을 공인된 제3자(CA, Certicifate Authority) 업체가 보증해주는 전자화된 문서이다.

- 클라이언트가 접속하려는 서버가 신뢰할 수 있는 서버인지를 판단할 수 있다

- CA의 비공개키는 절대로 유출되어선 안된다.

 

* SSL 인증서의 장점 및 역할

- 통신 내용이 노출, 변경되는 것을 방지

- 클라이언트에 접속하려는 서버가 신뢰할 수 있는 서버인지 확인 가능

- SSL 통신에 사용할 공개키를 클라이언트에게 제공한다

 

 

* SSL에서 사용하는 암호화의 종류

- 암호: 텍스트를 아무나 읽지 못하도록 encoding하는 알고리즘

- 키: 암호의 동작을 변경하는 매개변수, 키에 따라 암호화 결과가 달라지기 때문에 키를 모르면 복호화가 불가능하다

 

* 대칭키 암호화 방식

- 인코딩과 디코딩에 같은 키를 사용한다

- 암호를 주고받는 사람들 사이에 대칭키를 전달하는 것이 어렵다

- 단점으로 대칭키를 전달하는 과정에서 키가 유출되면 암호의 내용을 복호화할 수 있기 때문에 보안에 상대적으로 약하다

 

* 공개키 암호화 방식

- A키로 암호화하면 B키로 복호화를 할 수 있고, B키로 암호화하면 A키로 복호화 할 수 있는 방식

- public key는 공개되어 있으며 보통 디지털 인증서 안에 포함되어 있다. public key로 암호화(인코딩)한다.

- private key는 호스트만이 알고있다. public key로 암호화된 정보를 받아 private key로 복호화 할 수 있다.

- 메세지의 인코딩은 누구나 할 수 있도록 해주는 동시에, 메세지의 디코딩은 private key 소유자에게만 있다.

 

* 전자서명

- private key를 이용해 정보를 암호화 한 후에, 공개키와 함께 암호화된 정보를 전송한다

- 정보와 공개키를 획득한 사람은 공개키를 이용해 암호화된 정보를 복호화한다.

- 암호화딘 데이터를 공개키를 가지고 복호화 할 수 있다는 것은, 그 데이터가 공개키와 쌍을 이루는 비공개키에 의해 암호화되었다는 것이다.

- 즉, 공개키가 데이터를 제공한 사람들의 신원을 보장해주게 되는 것이다.

 

* SSL 인증서

인증서의 역할은 다음 두가지다.

- 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장한다

- SSL 통신에 사용할 공개키를 클라이언트에게 제공한다

 

* SSL 인증서의 서비스 보증 방법

- 웹브라우저가 서버에 접속하면 서버는 제일 먼저 인증서를 제공

- 브라우저는 인증서를 발급한 CA가 자신이 갖고있는 CA 리스트에 있는지 확인한다

- 리스트에 있다면 해당 CA의 공개키를 이용해 인증서를 복호화한다

- 인증서를 복호화할 수 있다는 것은 이 인증서가 CA의 비공개키에 의해 암호화 된 것을 의미한다. 즉, 데이터를 제공한 사람의 신원을 보장해주게 된다.

 

* SSL 동작방법

- 공개키 암호화 방식은 알고리즘 계산방식이 느린 경향이 있다

- 따라서 SSL은 암호화된 데이터를 전송하기 위해 공개키와 대칭키 암호화 방식을 혼합하여 사용한다

- 안전한 의사소통 채널을 수립할 때는 공개키 암호를 사용, 이렇게 만들어진 안전한 채널을 통해 임시의 무작위 대칭키를 생성 및 교환한다.

- 클라이언트와 서버가 주고 받는 실제 정보는 대칭키 방식으로 암호화

- 대칭키 방식으로 암호화된 실제 정보를 복호화할 때 사용할 대칭키는 공개키 방식으로 암호화해 클라이언트와 서버가 주고받는다

-- 실제 데이터 암호화 방식: 대칭키

-- 상기 대칭키를 서로 공유하기 위한 암호화 방식: 공개키

 

 

* SSL 통신과정

- 컴퓨터와 컴퓨터가 네트워크 통해 통신을 할 때 핸드쉐이크 -> 세션 -> 세션종료의 과정을 거친다

- 암호화된 http 메세지를 교환하기 전에 클라이언트와 서버는 SSL 핸드세이크를 진행한다

- 핸드쉐이크의 목적은 다음과 같다

-- 프로토콜 버전번호 교환

-- 양쪽이 알고있는 pre master secret 키 생성 교환

-- 양쪽의 신원 인증

-- 채널을 암호화 하기 위한 임시 세션 키 생성

 

* 대칭키와 공개키를 혼합하여 사용하는 이유

- 공개키 방식이 많은 컴퓨터 파워를 요구하기 때문이다

- 실제 데이터는 대칭키로 암호화하면, 암호화/복호화 과정이 더 간단하다

- 이 대칭키는 속도는 느리지만 데이터를 안전하게 주고 받을 수 있는 공개키 형식으로, 서버와 클라이언트에서 주고받는다

- 실제 데이터 모두를 대칭키를 이용해 전송하는 것보다 컴퓨터 자원을 효율적으로 사용할 수 있다

 

 

 

 

출처: [생활코딩]HTTPS와 SSL 인증서

[초보몽키의 개발공부로그] HTPPS와 SSL 인증서, SSL 동작방법

'Coding > 기타' 카테고리의 다른 글

VSCode Extension - Draw.io  (0) 2020.05.11
캡슐화(encapsulation)  (0) 2020.05.04
디지털 이미지 표현, 크기 - bitmap  (0) 2020.03.13
VScode terminal 설정하기 - Windows  (0) 2020.03.11
Linux/Ubuntu에서 Docker 설치  (0) 2020.02.09