SSL / TLS
SSL 및 TLS
는 네트워크를 통해 작동하는 서버, 시스템 및 응용프로그램간에 인증 및 데이터 암호화를 제공하는 암호화 프로토콜이다. TLS 는 SSL3.0 을 기반으로 하는 보다 안전한, SSL의 업데이트된 버전이며, SSL 자체는 현재 사용하지 않는다. SSL에서 TLS로 명칭이 변경되었지만, TLS 및 SSL는 모두 'SSL'이라고 불리기도 한다.
암호화 방식
- 대칭키 암호화
- 대칭키 암호화 방식은 암복호화에 사용하는 키가 동일한 암호화 방식을 말한다.
- 공개키 암호화
- 공개키 암호화 방식은 암복호화에 사용하는 키가 서로 다른 암호화 방식을 말한다.
- 개인 키 : 이 키는 비공개로 유지되며 정보를 암호화 할 수 있고, 공개 키로 암호화된 정보를 복호화할 수 있다.
- 공개 키 : 사람들에게 공개된 키이며 정보를 암호화 할 수 있고, 개인키로 암호화된 정보를 복호화할 수 있다.
- 공개키로 암호화 하면, 데이터 보안에 중점을 두고, 개인키로 암호화하면 인증 과정에 중점을 둔다.
- 공개키 암호화 방식은 암복호화에 사용하는 키가 서로 다른 암호화 방식을 말한다.
SSL이란?
SSL이란 보안 소켓 계층을 이르는 것으로, 인터넷 상에서 데이터를 안전하게 전송하기 위한 인터넷 암호화 통신 프로토콜을 말한다.
SSL은 전달되는 모든 데이터를 암호화하고 특정한 유형의 사이버 공격도 차단한다. SSL은 TLS(Transport Layer Security) 암호화의 전신이기도 한다. SSL은 전자상거래 등의 보안을 위해 넷스케이프에서 처음 개발되었는데 이후, 인터넷상의 표준 프로토콜로 자리매김하면서 IETF(Internet Engineering Task Force)에 의해 TLS(Transport Layer Security)로 표준화 되었다.
SSL / TLS 인증서
SSL은 SSL 인증서(=TLS인증서) 가 있는 웹사이트만 실행할 수 있다. 인증서는 클라이언트와 웹서버 간의 통신을 제 3자가 보증해주는 전자화된 문서이다. SSL 인증서에는 공개 키가 포함되며, 이 공개키로 암호화가 가능하게 되고, 클라이언트의 요청은 공개 키를 이용해 서버에 암호화 하여 전달한다. 서버에서는 개인 키를 이용해 암호화된 데이터를 복호화한다. 해당 인증서를 발급하는 기관은 CA(certificate authority) 라고 한다.
HTTPS (Hypertext Transfer Protocol Secure)
HTTPS 는 컴퓨터 네트워크를 통한 보안 통신에 사용되며 인터넷에서 널리 사용되며, 통신 프로토콜은 TLS(Transport Layer Security) 또는 SSL을 사용하여 암호화된다. 즉, HTTPS는 SSL 또는 TLS 위에 HTTP 프로토콜을 얹어 보안된 HTTP 통신을 하는 프로토콜이다. HTTPS 를 사용하는 웹 사이트는 https://~ 와 같은 주소를 갖으며, HTTPS 프로토콜을 사용하기 위해서는 인증기관(CA)으로 부터 SSL 인증서를 발급받아야 한다.
SSL 작동 과정
SSL 작동 과정은 크게 HandShake
, 세션(데이터 송수신)
, 세션 종료
의 3 가지로 나뉘며, 다음 그림과 같다.
SSL은 결론적으로, 암호화된 데이터를 전송하기 위해서 공개키와 대칭키를 혼합해서 사용한다.
- 실제 데이터 : 대칭키 암호화
- 대칭키를 공유하는 방식 : 공개키 암호화
- 클라이언트와 서버가 주고 받는 실제 정보는 대칭키 방식으로 암호화하고, 암호화된 실제 정보를 복호화할 때사용할 대칭키는 공개키 방식으로 암호화해서 클라이언트와 서버가 주고 받는다. 자세한 과정은 아래와 같다.
1) HandShake
1. Client Hello
클라이언트가 서버에 접속한다. 이 단계에서 주고 받는 정보는 다음과 같다.
- 클라이언트 측에서 생성한 랜덤 데이터
- 클라이언트가 지원하는 암호화 방식들 : 클라이언트와 서버가 지원하는 암호화 방식이 서로 다를 수 있기 때문에 상호간에 어떤 암호화 방식을 사용할 것인지에 대한 협상을 해야 한다.
- 세션 아이디
2. Server Hello
클라이언트에 대한 응답이다. 이 단계에서 주고 받는 정보는 다음과 같다.
- 서버 측에서 생성한 랜덤 데이터
- 서버가 선택한 클라이언트의 암호화 방식
인증서
이때, 인증서에는 서버의 공개키가 포함되어 있다.
3. SSL 인증서 검증
클라이언트는 서버의 인증서가 CA에 의해서 발급된 것인지 확인한다.
클라이언트는(브라우저) CA 리스트와 그들의 공개키 역시 내장하고 있다. CA 리스트에 인증서가 없다면, 사용자에게 경고 메시지를 출력한다. 인증서가 CA에 의해 발급된 것인지 확인하기 위해 클라이언트에 내장된 CA의 공개키로 인증서를 복호화한다. 복호화에 성공했다면, 해당 인증서는 CA의 개인키로 암호화된 문서임이 보증되어 서버를 신뢰할 수 있게 된다.
4. Premaster Secret 생성 및 전송
클라이언트는 Premaster Secret 라는 키를 생성하고 공개키로 암호화하여 전송한다.
클라이언트는 앞서 Client Hello
에서 생성한 랜덤 데이터와 Server Hello
과정에서 받은 랜덤 데이터를 조합하여 Premaster Secret 값을 생성한다. 또한, 이 값을 인증서를 복호화함으로써 얻어낸 서버의 공개키로 암호화하여, 서버에 전송한다.
5. Session Key 생성
서버와 클라이언트 모두 Session Key를 생성한다.
서버는 클라이언트로 부터 받은 데이터를 자신의 개인키로 복호화하여 Premaster Secret 값을 얻어낸다. 서버와 클라이언트 모두 Premaster Secret 으로 부터 Master Secret 을 생성하고, 이로부터 최종적으로 Session Key를 생성한다. 이 Session Key는 다음 과정인 세션에서 데이터를 주고 받을 때 사용된다.
2) 세션
세션(데이터 송수신)은 실제로 서버와 클라이언트가 데이터를 주고 받는 단계이다. 클라이언트와 서버가 정보를 상대방에게 전송하기 전에 session key 값을 이용해서 대칭키 방식으로 암호화 한다는 점이 특징이다. 앞선 handShake 단계를 통해 서로 session key를 공유하였기 때문에, 서버와 클라이언트 모두 정보를 암복호화 할 수 있다.
- 암호화에는 대칭키를 사용하는 이유?
- 공개키 방식이 이상적인 암호화 방식이지만, 그만큼 컴퓨팅 파워를 많이 사용한다는 단점이 있다. 이를 보완하기 위해, 대칭키 방식과 공개키 방식을 하이브리드한 방식으로 통신을 진행하는 것이다.
3) 세션 종료
데이터의 전송이 끝나면 클라이언트와 서버는 SSL 통신이 끝났음을 서로에게 알려준다. 이 때 통신에서 사용한 대칭키인 세션키를 폐기한다.
References
https://kanoos-stu.tistory.com/46
https://www.lesstif.com/ws/ssl-tls-https-43843962.html
https://blog.naver.com/skinfosec2000/222135874222
https://goodgid.github.io/TLS-SSL/
https://powerdmarc.com/ko/difference-between-ssl-and-tls/
https://velog.io/@ragnarok_code/Network-SSL-TLS%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://aws.amazon.com/ko/compare/the-difference-between-ssl-and-tls/
'TIL' 카테고리의 다른 글
[TIL] 데이터베이스 정규화 (0) | 2024.08.12 |
---|---|
[TIL] STOMP 개념 (2) | 2024.07.28 |
[TIL] Interrupt 란? (3) | 2024.07.15 |
[TIL] CORS 문제와 해결법 (1) | 2024.07.01 |
[TIL] Spring의 의존성 주입 방법 (1) | 2024.06.23 |