HTTP(HyperText Transfer Protocol)와 HTTPS(HyperText Transfer Protocol Secure)는 데이터를 전송하는 프로토콜이나 보안적인 측면에서 차이점이 있다
그 전에 SSL(Secure Sockets Layer)이라는걸 먼저 알아보자
SSL(TLS ⇒ SSL의 현재 번전)
sequenceDiagram participant Client participant Server Client->>Server: SSL 연결 요청 Server->>Client: 인증서 제공 Client->>Server: 인증서 검증 Client->>Server: 암호화 방법 협상 Server->>Client: 암호화 방법 협상 Client->>Server: 상호 인증 수행 Server->>Client: 인증 완료 응답 Client->>Server: 핸드쉐이크 완료
SSL 핸드쉐이크(Handshake) 과정은 SSL/TLS 프로토콜을 사용하여 통신을 시작하기 전에 서로간의 인증 및 암호화를 수행하는 과정입니다. SSL 핸드쉐이크 과정은 다음과 같습니다.
- 클라이언트가 SSL 연결을 요청합니다.
- 서버는 클라이언트에게 인증서를 제공합니다.
- 클라이언트는 인증서를 검증합니다.
- 클라이언트와 서버는 암호화 방법 및 암호화에 필요한 정보를 교환합니다.
- 클라이언트와 서버는 상호 인증을 수행합니다.
- SSL 핸드쉐이크가 완료되면, 클라이언트와 서버 간에 암호화된 통신이 시작됩니다.
이 과정에서 인증서는 서버가 신뢰할 수 있는지를 검증하는 역할을 합니다. 클라이언트는 인증서의 발급자가 신뢰할 수 있는 인증기관(CA, Certificate Authority)에서 발급되었는지를 확인하고, 인증서의 내용과 일치하는지를 검증합니다. 인증서가 검증되면, 클라이언트는 서버가 신뢰할 수 있는 것으로 간주하고 SSL 연결을 계속 진행합니다.
또한, 핸드쉐이크 과정에서는 클라이언트와 서버 간에 암호화 방법 및 암호화에 필요한 정보를 교환합니다. 이 과정에서 클라이언트와 서버는 암호화 키를 공유하고, 통신에 사용될 암호화 방법과 암호화된 데이터의 무결성을 검증하는 방법 등을 협의합니다.
핸드쉐이크 과정이 완료되면, 클라이언트와 서버 간에는 암호화된 통신이 시작됩니다. 이를 통해 중간에 제3자가 정보를 엿볼거나 조작하는 것을 방지할 수 있습니다.
HTTP / HTTPS
https는 기존 server와의 handshake이후 ssl handshake 과정을 추가한 프로토콜이다
그럼으로써 클라이언트는 데이터를 암호화 하여 보내고 서버는 복호화 하기 때문에 안전한 통신이 가능하다
graph LR HTTP_Client -->|hello word| HTTP_SERVER HTTPS_Client -->|sf5dsa3fas1df| SSL --> HTTPS_SERVER
위의 그림과 같이 http의 평문으로 보내는 방식과 암호화 하여 보내는 방식의 차이가 있다
HTTPS의 CA기관 인증 방식
graph LR CA(CA 인증기관) --> |인증서를 비밀키로 암호화 하여 전달| SERVER --> |CA 암호화된 인증서 전달|Client --> 인증서_복호화