HyperText Transfer Protocol over Secure Socket Layer
서로 다른 두 컴퓨터가 네트워크를 통해 안전하게 메시지를 주고받기 위해 만든 프로토콜
HTTPS는 TCP 대신 전송 계층 보안(TLS:Transfer Layer Security) 프로토콜을 기반으로 하는 HTTP
TLS은 OSI 7 계층 중 네 번째에 해당하는 전송 계층의 TCP 프로토콜을 기반으로 동작하는 보안 프로토콜이다.
HTTPS를 사용하는 이유
HTTP의 패킷을 까보면 클라이언트가 보낸 모든 내용을 볼 수 있다.
제삼자가 이 정보를 볼 수 있으며, 메시지를 원하는 형태로 변조할 수 있으므로 서버가 해킹될 위험도 있다.
HTTPS는 서버와 클라이언트가 주고받는 메시지를 암호화하여 제삼자가 볼 수 없다.
메시지를 암호화/복호화할 때 사용하는 키는 HTTPS로 메시지를 주고받는 두 컴퓨터만 알기 때문에 제삼자가 메시지를 보더라도 암호화되어 있어 내용을 알 수 없다.
HTTPS는 4계층에서 동작하는 TLS와 달리, 더 높은 7 계층에서 동작한다.
그래서 키를 안전하게 교환하는 것 외에도 7계층 정보인 HTTP의 도메인 주소가 신뢰할 수 있는지 검사하는 기능도 제공한다.
웹 브라우저는 HTTPS 연결 과정에서 서버가 보낸 인증서를 받는다.
인증서가 신뢰할 수 있는 기관에서 인증한게 아니거나 인증 기간이 만료됐다면 연결을 허용하지 않는다.
HTTPS 구성 요소
HTTPS는 전적으로 TLS를 기반으로 하며 TLS 버전에 따라 사용 가능한 암호화 목록과 안정성이 달라진다.
높은 버전을 사용하면 오래된 하드웨어나 소프트웨어를 지원하지 않아서 호환성 문제가 발생할 수 있지만, 더 강력한 암호 알고리즘을 사용하기 때문에 해킹 위험이 줄어든다.
- TLS 1.0
SSL 3.0과 일부 호환된다.
오래 전에 제정된 버전이라 모든 암호 알고리즘에 취약점이 있다.
(크롬, 익스, 파이어폭스, 사파리 등의 웹 브라우저들은 2020년 3월부터 TLS 1.0 및 1.1 지원을 중단할 것이라고 발표했다 함)
- TLS 1.1
1.0 프로토콜에서 발견된 취약점들을 개선하고 더 강력한 암호 알고리즘을 사용.
유니티와 같은 일부 플랫폼에서는 TLS 지원이 늦어서 1.1을 사용하는 곳이 꽤 많이 남아 있다.
- TLS 1.2
1.1에서 서명, 랜덤 함수 등에서 사용하는 MD5/SHA-1 해시 함수들을 사용 할 수 없게 제거하고 알고리즘을 SHA-2 기반으로 바꿨다.
사용할 수 있는 암호 목록도 더 강력하고 안전하다.
현재 가장 많이 사용하는 버전
인증서(X.509)
HTTPS 통신을 하기 위해서는 반드시 인증서가 필요하다.
X.509는 이러한 형태의 인증서를 위한 표준으로 신뢰할 수 있는 인증기관(CA)에서만 발급이 가능하다.
일정 비용을 지불하면 누구나 발급할 수 있다.
(무료 SSL 인증서를 발급해주는 곳도 있긴 하다.)
X.509 인증서는 발행 기관, 인증서 버전, 고유 번호, 인증서 소유자 및 수유자 정보 등을 포함하고 있다.
- 인증서의 종류
1. 싱글 도메인 : 도메인 1개를 지원
2. 멀티 도메인 : 제한된 개수의 서브 도메인을 지원
3. 와일드카드 도메인 : 개수 제한이 없는 서브 도메인을 지원 (실무에서는 대부분 이 도메인을 사용)
안드로이드 폰에서 인증서 확인하는 방법:
설정 -> 인증서 검색-> 인증서 확인 탭 클릭
HTTPS를 소프트웨어 프레임워크에서 설정하는 것보다는 Nginx나 아파치와 같은 웹 서버에서 설정하는 것이 안전하다.
두 서버 모두 HTTP 및 HTTPS 표준에 부합하는 많은 기능을 가지고 있고 이미지와 같은 정적 파일을 자동으로 캐시 처리하는 등의 좋은 기능이 있다.
letsencypt에서 인증서를 무료로 발급받을 수 있다.
인증서를 발급받기 위해서는 도메인을 구매하거나 무료로 도메인을 받아야 한다.
다만 유효일인 90일로 자동 발급 설정이 필요하며, 와일드카드 적용이 조금 어렵다.
한빛미디어에서 출판한 [학교에서 알려주지 않는 17가지 실무 개발 기술]을 읽으면서 도움이 되는 정보가 많아 나중에 편하게 찾아서 보기 위해 참고하여 작성했습니다.
'ETC' 카테고리의 다른 글
2021년 그리고 2022년 (2) | 2022.01.01 |
---|---|
MongoDB와 ElasticSearch 테스트 (용량, 속도) (0) | 2021.03.25 |
RESTful API (0) | 2021.01.15 |
해시 함수 (hash function) (0) | 2020.12.31 |
UUID - 범용 고유 식별자 (0) | 2020.12.28 |