본문 바로가기

공부 정리

TLS/SSL

반응형

HTTP와 HTTPS


사람들은 인터넷에서 웹사이트 데이터를 전송하기 위해 HTTP를 사용합니다. HTTP는 데이터를 명시적인 텍스트 형식으로 전송합니다. 단, 이 명시적인 텍스트 형식의 전송은 인터넷에서 민감한 개인정보, 카드번호, 비밀번호 등을 보내지 않는 경우를 말합니다. 만약에 데이터가 송신자에 의해서 암호화되지 않는다면, 해커는 중간에 민감정보를 탈취합니다.

 

HTTPS는 HTTP의 보안 문제를 해결하기 위해 등장했습니다. HTTPS에서 클라이언트와 서버 사이에 데이터를 암호화할 수 있습니다. 그러므로, 해커는 데이터를 가로채도 암호화된 데이터만 볼 수 있습니다. 기본의 메세지를 보려고 하더라도, 해커는 복호화 키가 필요합니다.

 

요즘에는, 웹사이트가 민감정보를 보내지 않더라도 보안을 위해서 HTTPS를 사용합니다. 안전한 통신을 위해서 다른 포트 번호를 사용하면 됩니다. 예를 들어, 표준으로 HTTP는 80번 포트를, HTTPS는 443포트를 사용합니다.

 

 

SSL과 TLS 소개


HTTPS, FTPS, SMTPS 같은 보안 프로토콜은 SSL보다 TLS를 사용합니다.
TLS는 SSL보다 늦게 등장했습니다. TLS는 비대칭 암호화를 이용한 데이터 인증을 제공합니다. 웹 사이트는 SSL 증명서라고 불리는 디지털 증명서를 보냅니다. 웹 브라우저는 증명서를 확인하고, 데이터 전송을 진행합니다.

대게, HTTP 요청에서, 서버는 인증을 제공합니다. 선택사항이지만 클라이언트도 인증기능을 제공합니다. 더욱이, 클라이언트는 진짜 웹사이트를 확인하기 위해서 서버의 디지털 증명서를 검사합니다.

 

 

SSL/TLS의 역사


SSL 1.0은 1995년 Netscape에서 개발되었으나 출시되지 못했고, 1995년 SSL 2.0 버전이 출시되었습니다. 1996년에 SSL 3.0버전이, 결국 보안 이슈로 SSL 모든 버전은 더이상 사용되지 않습니다

TLS 1.0 버전은 1999년에 IETF에서 개발되었습니다. 2006년 TLS 1.1으로 업데이트 되었고, 2008년 TLS 1.2 버전이, 2018년에 TLS 1.3버전이 출시되었습니다. TLS 1.0과 1.1은 이제 더이상 사용되지 않습니다. TLS 1.2와 1.3만이 2022년 기준 TLS에서 사용되고 있습니다.

 

 

SSL과 TLS


TLS는 클라이언트와 서버 사이에 주고받는 데이터를 보호하는데 사용합니다. TLS는 HTTPS 프로토콜의 핵심 요소입니다. SSL(Secure Socket Layer)와 TLS는 종종 혼용해서 사용되는데, 같지 않습니다. TLS는 SSL보다 늦게 등장했습니다. TLS는 단방향 혹은 양방향으로 사용됩니다.

2-1 One-Way TLS

단방향 TLS에서, 클아이언트는 신뢰하는 서버로부터 데이터를 받도록 서버를 검사합니다. 단방향 TLS를 구현하기 위해서, 서버는 클라이언트와 공공 증명서를 공유해야 합니다.

2-2 Two-Way TLS

양방향 TLS에서, 클라이언트와 서버는 서로가 신뢰할 수 있도록 서로를 검증합니다. 이를 구현하기 위해서, 클라이언트와 서버는 각각 서로의 공공 증명서를 공유해야 합니다

 

 

SSL/TLS Handshake


클라이언트와 서버는 handshake를 합니다.  클라이언트가 먼저 메세지를 보내는 것으로 시작합니다.

 

1. 클라이언트에서 지원되는 TLS 버전의 리스트와 암호와 알고리즘을 사용하여 handshake 과정을 시작합니다.

2. 서버는, 전송된 TLS 버전, 암호화 알고리즘을 확인하고 공개키를 포함한 디지털 증명서를 응답합니다.
3. 클라이언트는 서버의 디지털 증명서를 검사하고 해커로부터 공격을 방지하기 위해서 서버의 공개키로 암호화한 비밀키를 만들어 전송합니다.
4. 서버는 자신의 개인키를 이용해 비밀키를 해독하고, 이제 클라이언트와 서버 모두 데이터를 암호화하고 복호화하는 키를 가지게 됩니다.
5.클라이언트는 MAC과 해쉬로 인증된 암호화된 데이터를 서버에 보냅니다.

6.서버는 복호화와 인증을 시작합니다. 성공적으로 완료되면, 서버는 클라이언트에 암호화된 메세지를 응답합니다.

7. 최종적으로 클라이언트는 비밀키를 사용해서 데이터를 복호화합니다.

 


만약에 클라이언트나 서버가 어느 순간에라도 데이터 복호화 혹은 인증에 실패하면, handshake는 종료됩니다. 

TLS는 데이터 통합 체크를 위해서 HMAC을 사용합니다. TLS 1.3은 AEAD를 사용하여 암호화와 인증을 모두 제공합니다. SSL은 MAC을 기반으로 MD5와 SHA1을 사용합니다.

 

추가적으로, TLS는 SSL보다 다양한 암호화 세트를 제공합니다. TLS 1.3 암호화는 이전 TLS 버전보다 안정성을 위해 많은 알고리즘을 제거했습니다. SSL은 대게 Fortezza 암호화 방식을 사용합니다.

 

* 참고

https://www.baeldung.com/cs/ssl-vs-tls

https://www.baeldung.com/spring-tls-setup

반응형

'공부 정리' 카테고리의 다른 글

HTTP Method for Restful Services  (0) 2022.10.14
대칭키 vs 비대칭키  (0) 2022.09.05
CORS란 무엇인가?  (0) 2022.08.05
Git vs GitHub 차이점  (0) 2021.03.22
MVC vs MVP vs MVVM  (0) 2020.11.02