원래의 http 웹에서의 데이터는 누구나 읽을 수 있는 텍스트 형태로 전송되었다. 따라서 중간에 가로채는 위험성에 많이 노출됐었다.
TCP?
: TCP는 인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나로, 신뢰성 있는 데이터 전송을 보장하는데 사용된다.
TCP는 연결 지향적이고, 데이터가 올바르게 전달되었는지 확인하고, 손실된 데이터를 재전송 하는 역할을 수행한다. 데이터의 순서를 보장하고 흐름제어 및 혼잡 제어를 통해 네트워크의 효율성을 높인다.
IP?
: 데이터 패킷을 네트워크를 통해 전송하는데 필요한 주소 지정 및 라우팅 기능을 제공한다.
+-------------------+
| Application |
| Data |
| (오리진) |
+-------------------+
1. 어플리케이션 데이터 추가: 어플리케이션에 전송할 데이터(ex:오리진 데이터)가 생성된다.
-> 어플리케이션 레이어 : http, etp등 프로토콜을 통해 데이터가 생성된다.
+-------------------+
| TCP |
| Header |
+-------------------+
| Application |
| Data |
| (오리진) |
+-------------------+
2. TCP 헤더 추가: 애플리케이션 데이터에 TCP헤더가 추가된다. TCP헤더에는 포트 번호, 순서 번호, 확인 응답 번호등의 다양한 정보가 포함된다. TCP는 신뢰성 있는 전송을 위해 패킷 순서를 관리하고, 패킷이 손상되었을 경우 재전송 요청을 할 수 있다.
-> Transport Layer(전송 계층)
-> TCP는 데이터의 무결성과 순서를 보장한다.
-> 기밀성은 보장할 수 없기 때문에 TCP위에서 작동하는 TLS/SSL을 이용해 데이터 자체를 암호화 한다. (중요)
+-------------------+
| IP |
| Header |
+-------------------+
| TCP |
| Header |
+-------------------+
| Application |
| Data |
| (오리진) |
+-------------------+
3. IP헤더 추가: TCP세그먼트에 IP헤더를 추가한다. IP 헤더에는 송신자와 수신자의 IP주소, 프로토콜 정보등이 포함된다.
-> network Layer
+-------------------+
| Data Link |
| Header |
+-------------------+
| IP |
| Header |
+-------------------+
| TCP |
| Header |
+-------------------+
| Application |
| Data |
| (오리진) |
+-------------------+
4. 데이터 링크 계층 헤더 추가: IP패킷에 데이터 링크 계층의 헤더를 추가한다. 이 헤더는 MAC(Media Access Control)주소와 같은 정보를 포함한다.
-> data Link Layer
이 과정을 통해 패킷을 만들고, 이를 네트워크 상에서 송신자가 수신자에게 전달하며 서로 데이터를 주고받는 것이다.
수신자는 송신자의 패킷 과정을 역으로 데이터를 확인하게 된다.
패킷 수신 : 네트워크를 통해 패킷을 받는다. 패킷은 IP 헤더와 TCP헤더를 포함하고 있다.
IP헤더 처리 : 수신자는 먼저 IP헤더를 분석해 패킷의 목적지 IP주소가 자신의 IP와 일치하는지 확인한다. 일치하지 않으면 패킷을 무시하거나 다른 경로로 넘긴다.
TCP헤더 처리: 패킷의 자신의 주소로 왔으면, TCP헤더를 분석한다. 여기서 수신자는 포트 번호를 확인해서 어떤 어플리케이션이 이 데이터를 처리해야 하는지를 확인한다.
세그먼트 재조합: TCP는 수신한 세그먼트를 재조합한다. 여러 세그먼트가 도착하면 TCP는 순서 번호를 이용해 세그먼트를 올바른 순서대로 정렬한다. 또한 손실된 내용이 있으면 재전송 요청을 보낸다.
데이터 전달 : 모든 세그먼트가 올바르게 수신되고 재조합 된다면, TCP는 원래 데이터로 복원에 해당 어플리케이션에 전달한다.
응답 처리: 필요에 따라 수신자는 송신자에게 응답을 보낼 수 있고, 이는 다시 TCP/IP 프로토콜 과정을 통해 네트워크 상으로 전달된다.
SSL?
: 인터넷에서 데이터 전송의 보안을 제공하기 위해 설계된 프로토콜이다. SSL은 주로 웹 브라우저와 서버간의 안전한 통신을 보장한다.
SSL/TLS는 데이터의 기밀성, 무결성, 인증을 보장한다.
1. 핸드쉐이크(Handshake): SSL/TLS 연결을 설정하기 위해 클라이언트와 서버간의 헨드쉐이크 과정이 진행된다.
2. 데이터 전송: 헨드쉐이크가 완료되면, 클라이언트와 서버는 세션 키를 사용하여 데이터를 암호화해서 전송한다. 이 과정에서 데이터는 안전하게 보호된다.
3. 연결 종료: 데이터 전송이 완료되면, 클라이언트와 서버는 연결을 종료한다. 이 과정에서 세션키는 폐기한다.
부인방지기능은 제공이 안된다.(중요): 서버와 클라이언트 간의 세션을 설정하고, 이 세션 내에서 데이터를 암호화 해서 전송한다. 하지만 이 과정에서 각 당사자의 신원을 확인하는 것(인증)은 가능하지만, 그들이 특정 행동을 했다는 것을 증명할 수 있는 방법은 없다. -> 전자 서명을 사용해 보안한다.
TLS는 SSL의 다른 이름임 -> TLS는 최신버전 이름
replay attack(관찰된 통신내용을 그대로 재생하면 같은 결과를 얻을 수 있다)에 취약할 수 있다.
프로토콜: 특정한 규칙이나 절차의 집합을 의미한다. 데이터 전송, 통신, 상호작용을 위한 규칙과 형식을 정의하는걸 의미한다.
: Handshake 프로토콜은 TLS세션을 설정하는 과정에서 클라이언트와 서버간의 초기 협상을 담당한다.
record 프로토콜은 실제 데이터 전송을 처리하는 역할을 한다.
Session ID: 세션을 식별하는 고유한 ID로, 클라이언트와 서버 간의 연결을 재사용할 때 사용된다. 이를 통해 핸드셰이크 과정을 반복하지 않고도 빠르게 연결할 수 있다.
Certificate: 서버의 인증서로, 클라이언트가 서버의 신원을 확인하는 데 사용된다. 이 인증서는 일반적으로 공인된 인증 기관(CA)에 의해 서명된다.
Cipher Spec: 클라이언트와 서버가 합의한 암호화 방법에 대한 정보이다. 여기에는 사용될 압축 방법, MAC(Message Authentication Code) 알고리즘 등이 포함된다.
Compression Method: 데이터 전송 전에 사용할 압축 알고리즘을 정의한다. 이는 데이터 전송의 효율성을 높이기 위해 사용된다.
Master Secret Key: 핸드셰이크 과정에서 생성되는 48비트의 비밀 키로, 이후의 데이터 암호화 및 복호화에 사용된다. 이 키는 클라이언트와 서버 간의 안전한 통신을 보장하는 데 중요한 역할을 한다.
: 아파치 HTTP 서버에 SSL(보안 소켓 계층) 기능을 추가한 모듈로, 전송 중 데이터 암호화를 통해 보안성을 높이는 데 사용된다. 이를 통해 비공식 데이터 송수신을 안전하게 보호할 수 있다.
: 아파치 웹 서버의 모듈 중 하나로, SSL 및 TLS 프로토콜을 통해 HTTPS를 지원하는 기능을 제공한다. 이 모듈을 사용하면 웹 서버는 입력 및 출력 데이터의 암호화를 지원하여 사용자와의 안전한 연결을 유지할 수 있다.
: C2Net에서 개발한 상업용 웹 서버로, SSL을 기본으로 지원한다. 이 서버는 높은 보안성을 강조하며, 사용자 인증 및 암호화를 통해 데이터 보호와 안전한 웹 호스팅 서비스를 제공한다.