개발/기술

HTTPS, TLS, SSL

kwony 2023. 2. 28. 17:21

HTTPS

 

HTTP는 Hyprtext Transfer Protocol의 약어로 HTML을 전송하는 통신 프로토콜을 의미한다. HTTPS는 Hypertext Transfer Protocover over Secure Socket Layer 로 SSL 위에서 이뤄지는 HTML 통신 규약을 의미한다. 간단히 데이터를 안전하게 전송, 전달 할 수 있도록 보안 기능을 추가한 HTTP 프로토콜이라고 말할 수 있다.

 

TLS

 

Transport Layer Security의 약자다. 과거에는 SSL로도 불렸다. TLS는 컴퓨터 네트워크에 통신 보안을 제공하기 위해 설계된 암호 규약이다. TLS를 이용하면 클라이언트 서버 응용 프로그램이 네트워크로 통신할 때 암호화, 인증, 무결성을 보장한다

 

 

HTTP와 달리 암호화, 복호화 과정을 거치기 때문에 지연 시간이 발생하나 요즘에는 거의 없는 수준이라고 봐도 무관하다. TLS은 파일 전송에도 보안적인 요소를 추가해 SFTP로도 사용된다. HTTP 프로토콜로만 사용되는 것은 아니다.

 

동작 원리

 

웹사이트나 응용프로그램이 TLS를 사용하기 위해선 먼저 서버에 TLS(SSL) 인증서가 설치되어 있어야 한다. 인증기관이 도메인을 소유한 사람 또는 기관에 인증서를 발행하며 인증서에는 서버의 공개키와 누가 도메인의 소유자인지 정보를 포함한다. 

 

사용자가 HTTPS 로 웹사이트에 접속하거나 API 요청을 HTTPS로 요청하면 클라이언트와 서버 사이에 TLS 핸드셰이크가 시작한다. TLS 핸드 셰이크는 TLS를 사용하는 세션을 시작하는 단계다. 이 단계에선 통신하는 두 진영, 서버와 클라이언트가 서로를 인정하고(ack) 증명하는데 (verify) 사용할 알고리즘을 설정하는 메시지를 주고 받게 된다.

 

 

curl 을 통해서도 TLS 핸드셰이크를 확인할 수 있다.

 

➜  ~  curl -vs -l --http2 https://thumb.mt.co.kr/06/2023/02/2023022817344174856_1.jpg/dims/optimize/
*   Trying 183.111.246.137:443...
* Connected to thumb.mt.co.kr (183.111.246.137) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
*  CAfile: /etc/ssl/cert.pem
*  CApath: none
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=menu.mt.co.kr
*  start date: Apr  5 08:35:28 2022 GMT
*  expire date: May  6 08:35:28 2023 GMT
*  subjectAltName: host "thumb.mt.co.kr" matched cert's "thumb.mt.co.kr"
*  issuer: C=DE; O=Turing Crypto GmbH; CN=TuringSign RSA Secure CA
*  SSL certificate verify ok.