1.SSL 인증서 기본 용어 정리

- HTTP : Hypertext인 HTML을 전송하기 위한 통신규약을 의미한다.

- HTTPS : 웹 통신이 암호화되어 제3자가 감청, 조작을 방지하기 위해 포괄적인 보안적인 체계가 적용된 HTTP 프로토콜

- TLS : 네스케이프에 의해서 SSL이 발명되었고, 이것이 점차 폭넓게 사용되다가 표준화 기구인 IETF의 관리로 변경되면서 TLS라는 이름으로 바뀌었다.

TLS 1.0은 SSL 3.0을 계승한다. 따라서 SSL과 TLS는 버전 차이가 있을 뿐 사실상 같은 말이다.

 

- SSL 인증서 : 클라이언트와 서버간의 통신을 제3자가 보증해주는 전자화된 문서이다.
- 통신 내용이 공격자에게 노출되는 것을 막을 수 있다.
- 클라이언트가 접속하려는 서버가 신뢰 할 수 있는 서버인지를 판단할 수 있다.
- 통신 내용의 악의적인 변경을 방지할 수 있다.

 

- CA : 클라이언트가 접속한 서버가 신뢰 할 수 있는 서버임을 보장하는 민간기업
이런 기업들을 CA(Certificate authority) 혹은 Root Certificate 라고 부른다.

 

구글(크롬), 애플(사파리), MS(익스플로러) 등 브라우저 업체에게 업격한 기준으로 이러한 CA를 선정한다.

Symantec(VeriSing)
Comodo
GoDaddy
GlobalSign

SSL을 통해서 암호화된 통신을 제공하려는 서비스는 CA를 통해서 인증서를 구입해야한다.

 

============


2.SSL 암호화 종류

SSL은 보안과 성능상의 이유로 두가지 암호화 기법을 혼용해서 사용하고 있다.

 

- 대칭키 방식
- 공개키 방식

============

3.SSL 인증서를 활용한 HTTPS 동작 원리

 

 

1, Clinent Hello

- 랜덤 데이터와 현재 지원할 수 있는 암호화 방식을 서버에게 전달.

- SSL 인증서를 이용한 HTTPS 통신은 대칭키 암호화 기법, 공개키 암호화 기법을 모두 사용하나, 이런 암호화 기법은 RSA, AES 등 여러가지 알고리즘이 있기 때문에 서로 어떤 암호화 방식을 사용할지 협의하는 과정이 필요함.

 

 

2.Server Hello
- 서버 랜덤 데이터를 전달

- 암호화 방식 선택하여 전달

- 암호화된 인증서 정보 전달

 

 

3.클라이언트가 서버로 pre master secret 생성하여 전달

-브라우저가 선정한 CA 발급 인증서 목록 중 서버가 전달한 인증서가 있는지 확인.

-인증서가 목록에 있다면 CA의 공개키를 가지고 인증서를 복호화함. (CA의 공개키는 브라우저에서 가지고 있음.)
-> 복호화에 성공했다면 해당 인증서는 CA의 비밀키로 암호화 했다는 것이 검증되므로 서버를 신뢰할 수 있음.

- 클라이언트 랜덤 데이터와 서버 랜덤 데이터를 조합하여 대칭키(pre master secret)를 생성함.

- 생성된 대칭키 (pre master secret) 는 중간에 제 3자에게 노출되어선 안되므로 서버의 공개키로 암호화 진행하고, 서버로 전달.

 

 

4.서버가 session key 생성하여 클라이언트로 전달

- 이제 서버와 클라이언트 모두 동일한 대칭키( pre master secret)를 가지고 있게 되었다.

- 클라이언트와 서버 모두 pre master secret를 서버의 개인키(비밀키)로 복호화하고, 이를 pre master secret -> master secret -> session key(대칭키)를 생성한다.

 

 

5.session key를 통해 클라이언트와 서버가 데이터 통신을 진행함

- 대칭키인 session key를 이용하여, 데이터를 암호화하고 통신 진행함.

 

 

6.session 종료
- 데이터의 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알려준다. 이 때 통신에서 사용한 대칭키인 세션키를 폐기한다.

 

참고
https://opentutorials.org/course/228/4894
 
https://brunch.co.kr/@swimjiy/47

'개발자 이야기 > 웹 보안' 카테고리의 다른 글

스프링 시큐리티란?  (0) 2024.04.11
암호화(AES, RSA, SHA) 관련 이야기  (0) 2024.04.10

+ Recent posts