SSL/TLS 란
TLS(Transport Layer Security)는 인터넷 상에서 통신할 때 주고받는 데이터를 보호하기 위한 표준화된 암호화 프로토콜입니다.
TLS는 넷스케이프사에 의해 개발된 SSL(Secure Socket Layer) 3.0 버전을 기반으로 하며, 현재는 2018년 8월에 발표된 TLS버전 1.3이 최종 버전입니다. (이전 버전인 1.2는 2008년에 발표되었으므로 10년만에 업그레이드 되었습니다.)
TLS는 전송계층(Transport Layer)의 암호화 방식이기 때문에 HTTP뿐만 아니라 FTP, XMPP등 응용 계층(Application Layer)프로토콜의 종류에 상관없이 사용할 수 있다는 장점이 있으며 기본적 으로 인증(Authentication), 암호화(Encryption), 무결성(Integrity)을 지원합니다.
SSL에서 TLS로 이름이 변경된 지 오래됐지만 아직도 사람들은 TLS대신 SSL이라는 표현을 더 많이 사용하고 있으며 실제로 SSL/TLS의 오픈소스 구현체 프로젝트의 명칭은 아직도 OpenSSL이기도 합니다.
또한 SSL/TLS의 가장 주된 적용 대상이 HTTPS다 보니 SSL/TLS를 HTTPS와 혼용하는 경우도 많습니다.
이 문서에서는 SSL 이라고 할 경우 SSL 프로토콜, TLS 는 TLS 프로토콜을 의미하며, 보안이 적용된 HTTP는 HTTPS로 지칭하겠습니다.
SSL/TLS 를 사용하면 중간자 공격1과 Packet Spoofing 을 통한 도감청을 막을 수 있으며 통신하는 상대방이 맞는지 인증할 수 있습니다. 2
TLS Hand Shake
SSL/TLS 세션은 다음 핸드셰이크 과정을 거친 후에 구축됩니다.
클라이언트와 서버는 헬로 메시지로 기본적인 정보를 송수신 (1, 2)
서버는 서버가 사용하는 SSL/TLS 인증서를 전달 (3, 4)
클라이언트는 암호화 통신에 사용할 대칭키를 생성하고 사이를 서버에 전달(5). 이 과정을 키 교환(Key Exchange) 라고 하며 디피-헬만 키 교환(Diffie–Hellman key exchange) 또는 RSA 를 많이 사용.
클라이언트는 암호화 통신에 사용 가능한 암호 알고리즘과 해시 알고리즘 목록을 서버에 전달. (6, 7)
서버도 알고리즘 목록을 교환후 핸드셰이크가 종료되며 이제 클라이언트와 서버는 암호화 통신에 필요한 대칭키를 서로 보유.(8, 9)
위 과정이 끝나면 SSL 세션이 구축되며 실제 암호화 통신을 시작할 수 있습니다.
OpenSSL 로 TLS 정보 확인하기
fiddler 같은 GUI 방식의 HTTPS 프로토콜 디버깅 툴이 많지만 command line 이라면 openssl 로 TLS 연결 정보를 확인할 수 있습니다.
openssl s_client -connect google.com:443
BASH
출력 결과를 보면 다음과 같은 내용등을 확인할 수 있습니다.
- Subject 와 Issuer
- 서버의 인증서
- TLS 프로토콜 버전, 암호 알고리즘
- 서버의 공개키 길이(256 bit)