
HTTPS(Hypertext Transfer Protocol Secure)는 HTTP에 보안 기능을 추가한 프로토콜로, 웹에서 데이터를 안전하게 주고받기 위해 사용됩니다. HTTPS는 HTTP의 모든 기능을 제공하면서, 추가적으로 데이터의 암호화, 인증, 무결성 보장을 통해 통신의 보안을 강화합니다.
HTTPS는 웹 통신의 보안을 강화하는 중요한 프로토콜로, 오늘날 대부분의 웹사이트에서 기본적으로 사용되고 있습니다. HTTP에 비해 약간의 추가 비용과 복잡성이 있지만, 보안성과 신뢰성을 크게 향상시키기 때문에 사용자의 개인 정보 보호와 데이터 무결성을 보장하기 위해 필수적인 기술입니다.
HTTPS는 데이터를 전송하기 전에 암호화하여, 제3자가 통신 내용을 엿볼 수 없도록 합니다. 이를 통해 웹 브라우저와 웹 서버 간의 통신 내용이 안전하게 보호됩니다.
HTTPS는 주로 TLS(Transport Layer Security) 프로토콜을 사용하여 암호화합니다. TLS는 이전의 SSL(Secure Sockets Layer) 프로토콜의 후속 버전으로, 대부분의 HTTPS 연결에서 사용됩니다.
HTTPS는 클라이언트가 통신하려는 서버가 신뢰할 수 있는 서버인지 확인할 수 있도록 디지털 인증서를 사용합니다.
서버는 인증 기관(CA: Certificate Authority)에서 발급받은 디지털 인증서를 클라이언트에게 제공하며, 클라이언트는 이 인증서를 통해 서버의 신뢰성을 확인합니다.
HTTPS는 전송 중인 데이터가 손상되거나 변조되지 않도록 보호합니다. 이를 통해 클라이언트와 서버 간에 주고받는 데이터가 전송 도중 변경되지 않았음을 보장할 수 있습니다.
SSL(Secure Sockets Layer)와 TLS(Transport Layer Security)는 인터넷 통신의 보안을 강화하기 위해 설계된 암호화 프로토콜입니다. 이 프로토콜들은 클라이언트(예: 웹 브라우저)와 서버 간에 주고받는 데이터를 암호화하여 전송하는 역할을 합니다. SSL은 초기 버전이며, TLS는 SSL의 발전된 버전으로 현재 널리 사용되고 있습니다.
1990년대 중반에 넷스케이프(Netscape)에 의해 개발된 보안 프로토콜입니다. 인터넷을 통해 전송되는 데이터를 암호화하여 보호합니다. SSL은 1.0 버전부터 시작하여 2.0, 3.0 버전으로 발전했지만, 보안상의 취약점이 발견되면서 더 이상 사용되지 않습니다.
SSL 3.0의 후속으로, 1999년에 최초로 도입되었습니다. SSL의 취약점을 보완하고, 더 강력한 암호화 알고리즘을 사용하여 보안을 강화했습니다. 현재 대부분의 보안 통신은 TLS 프로토콜을 기반으로 이루어지며, 최신 버전은 TLS 1.3입니다.

HTTPS 암호화 과정에서 가장 중요한 단계는 SSL/TLS 핸드셰이크(Handshake)입니다. 이 과정은 클라이언트(예: 웹 브라우저)와 서버가 안전하게 통신할 수 있도록 암호화 세션을 설정하는 절차를 의미합니다. 핸드셰이크 과정에서 양측은 통신에 사용할 암호화 방법을 협상하고, 세션 키를 교환하여 이후의 데이터 전송을 암호화합니다.
클라이언트는 서버에 연결을 시도하면서 첫 메시지인 Client Hello를 보냅니다.
이 메시지에는 클라이언트가 지원하는 암호화 알고리즘 목록, 사용할 수 있는 TLS 버전, 랜덤 값(세션 키 생성에 사용), 그리고 세션 ID(재사용 가능한 세션의 경우) 등이 포함됩니다.
서버는 클라이언트의 요청을 수신한 후, Server Hello 메시지로 응답합니다.
이 메시지에는 서버가 선택한 암호화 알고리즘, TLS 버전, 서버의 랜덤 값, 세션 ID 등이 포함됩니다.
서버는 자신이 신뢰할 수 있는 서버임을 증명하기 위해 디지털 인증서(서버 인증서)를 클라이언트에게 전송합니다. 이 인증서에는 서버의 공개 키가 포함되어 있습니다.
서버 키 교환(Server Key Exchange) (선택적):
만약 서버가 추가적인 키 교환 정보를 제공해야 하는 경우(예: Diffie-Hellman 키 교환), 이 단계에서 키 교환 메시지를 보냅니다.
클라이언트 인증(Client Authentication) (선택적):
일부 상황에서는 서버가 클라이언트의 신원을 확인하기 위해 클라이언트 인증서를 요구할 수 있습니다. 이 경우 클라이언트는 자신의 인증서를 서버에 보냅니다.
클라이언트는 서버의 공개 키를 사용하여 프리마스터 시크릿이라는 임시 암호화를 위한 비밀 값을 생성합니다.
이 프리마스터 시크릿은 클라이언트에 의해 서버의 공개 키로 암호화되어 서버로 전송됩니다.
서버는 자신의 개인 키를 사용해 클라이언트가 전송한 프리마스터 시크릿을 복호화합니다.
클라이언트와 서버는 프리마스터 시크릿과 서로의 랜덤 값을 조합하여 세션 키를 생성합니다. 이 세션 키는 이후의 모든 통신을 암호화하는 데 사용됩니다.
클라이언트는 이제 세션 키를 사용해 Finished 메시지를 암호화하여 서버에 보냅니다. 이 메시지는 클라이언트가 핸드셰이크를 완료했음을 알립니다.
이 메시지를 통해 핸드셰이크 과정에서 전송된 모든 데이터가 무결성을 가지고 있는지 확인합니다.
서버도 세션 키를 사용해 암호화된 Finished 메시지를 클라이언트에 보냅니다. 서버가 핸드셰이크를 완료했음을 알리는 이 메시지도 클라이언트와 동일하게 무결성을 확인합니다.
핸드셰이크 과정이 완료되면 클라이언트와 서버는 동일한 세션 키를 공유하게 되며, 이후의 모든 통신은 이 세션 키를 사용한 대칭 암호화 방식으로 암호화됩니다. 이 대칭 암호화는 비대칭 암호화보다 훨씬 빠르고 효율적입니다.

대칭키 암호화 방식(Symmetric Key Encryption)은 하나의 키를 사용하여 데이터를 암호화하고 복호화하는 암호화 방식입니다. 이 방식에서, 동일한 키가 암호화와 복호화 양쪽에 사용되기 때문에 "대칭"이라는 이름이 붙었습니다. 대칭키 암호화는 데이터의 기밀성을 보호하는 데 널리 사용되며, 효율적이고 빠르다는 장점이 있습니다.
대칭키 암호화는 하나의 키를 사용하여 데이터를 암호화하고 복호화하는 방식으로, 속도와 효율성에서 큰 이점을 가지고 있습니다. 하지만 키 분배 문제로 인해, 대칭키 암호화는 주로 소규모 환경이나 대칭키와 비대칭키를 결합한 혼합 방식(예: HTTPS에서의 SSL/TLS)에 사용됩니다.

비대칭키 암호화 방식(Asymmetric Key Encryption), 또는 공개키 암호화 방식(Public Key Encryption)은 서로 다른 두 개의 키를 사용하여 데이터를 암호화하고 복호화하는 암호화 방식입니다. 이 방식에서 하나의 키는 공개키(Public Key), 다른 하나는 개인키(Private Key)라고 불립니다. 공개키는 누구에게나 공개할 수 있지만, 개인키는 비밀로 유지해야 합니다.
비대칭키 암호화는 보안이 중요한 인터넷 통신, 디지털 서명, 인증 등에 필수적인 기술입니다. 대칭키 암호화에 비해 속도는 느리지만, 키 분배 문제를 해결하고, 높은 보안을 제공할 수 있습니다. 현재의 많은 보안 프로토콜은 비대칭키 암호화와 대칭키 암호화를 결합하여 사용하는 하이브리드 방식을 채택하고 있습니다.
- 개인키를 사용한 서명 생성 및 공개키를 통한 검증 (선택적):
개인키는 디지털 서명 생성에도 사용됩니다. 송신자는 데이터를 개인키로 서명하고, 수신자는 송신자의 공개키를 사용해 서명의 진위를 검증할 수 있습니다. 이 과정을 통해 데이터의 무결성과 송신자의 신원을 확인할 수 있습니다.
전자 서명(Electronic Signature)은 디지털 문서나 데이터의 신원 인증과 무결성을 보장하기 위해 사용되는 전자적인 형태의 서명입니다. 전자 서명은 서명자가 특정 문서에 서명했다는 것을 증명할 수 있게 해주며, 법적 효력을 가지는 경우가 많습니다.
전자 서명은 디지털 문서나 데이터의 무결성과 신뢰성을 보장하는 중요한 기술입니다. 비대칭키 암호화 방식을 사용하여 서명자의 신원을 인증하고 문서의 변조를 방지하며, 법적 효력을 가질 수 있습니다.
전자 서명은 전 세계적으로 비즈니스, 법률, 정부에서 널리 사용되고 있으며, 전자 상거래와 디지털 트랜잭션의 필수적인 요소로 자리 잡고 있습니다.
HTTPS 참고 영상 : https://www.akamai.com/ko/glossary/what-is-https?vid=what-is-https-or-secure-web-protocol-video
암호화 방식(이미지 출처) : https://hanjungv.github.io/2017-11-07-1_CS_SSL/