SSL/TLS란?

  • HTTP를 이용하여 데이터를 전송할 때, 우리가 주고받는 데이터는 암호화 되어있지 않다.
  • HTTP 통신 방식에 암호화를 추가한 방식이 HTTPS이다.
    • HTTPS에서 사용하는 암호화를 위해 사용하는 프로토콜이 SSL/TLS이다.

SSL, TLS

SSL(Secure Sockets Layer)은 TLS(Transport Layer Security)의 전신으로 시대를 거쳐 1.0, 2.0 그리고 1996년에 3.0이 출시되었다.

이후 1999년 SSL 3.0을 기초로 한 TLS 1.0이 출시되었고 1.1, 1.2 버전을 거쳐 2018년에 TLS 1.3이 출시되었다.

SSL은 현재는 거의 사용하지 않지만, TLS와 같은 의미로 사용되고 있다.

(이하로 SSL이라고 쓰겠다.)

SSL 인증서

  • SSL은 SSL인증서가 있는 웹사이트만 실행할 수 있다.
  • SSL 인증서는 신뢰할 수 있는 기관(CA)에서 발급한다.
  • SSL인증서에는 웹사이트의 공개 키가 포함되어있다.
    • SSL인증서는 공개 키 암호화 방식(RSA)을 통해 데이터를 암호화한다.
    • 웹 서버에 비밀 키가 존재한다.

SSL 원리

  1. 서버의 공개 키/ 비밀 키를 생성한다.
  2. CA(인증된 기관)에 공개 키와 기타 정보를 전달하여 SSL인증서를 생성한다.
    • SSL인증서는 CA의 비밀 키로 암호화 된다.
  3. 서버에 인증서를 저장하고 내 서버에 접속한 클라이언트에게 인증서를 보내준다.
  4. 클라이언트(브라우저)는 인증서를 CA의 공개 키로 복호화한다.
    • 브라우저에는 CA들의 공개 키가 내장되어 있다.
    • 복호화 성공 여부를 통해 CA에서 발급한 인증서인지 확인한다.
  5. 복호화 한 인증서에 들어있는 서버의 공개 키를 이용해서 통신한다.

SSL Handshake

  1. TCP Handshaking
    • 3-way-handshake를 한다.
    • SSL 통신을 하기위해 TCP연결이 수립 되어야 한다.
  2. SSL Handshaking
    1. Client Hello (Client → Server)
      • 클라이언트가 생성한 랜덤 데이터와 클라이언트가 사용가능한 암호화 방식을 서버로 전송한다.
      • 세션 키를 전송한다
    2. Server Hello (Server → Client)
      • 서버가 생성한 랜덤 데이터와 선택한 암호화 방식을 전송한다.
      • SSL 인증서를 전송한다.
    3. 클라이언트 확인
      • SSL 인증서를 CA의 공개 키를 이용해서 복호화한다.
      • 복호화가 성공했다면 해당 인증서는 CA에서 발급한 인증서라 신뢰할 수 있다는 뜻이다.
      • 복호화하여 서버의 공개 키를 얻을 수 있다.
    4. 대칭 키 암호화를 위한 pre master secret key 생성 (Client → Server)
      • 클라이언트가 생성한 랜덤 데이터 + 서버 랜덤 데이터를 통해 특정값 생성
      • 이 값을 서버의 공개키로 암호화
      • 서버로 전송
    5. session key 생성
      • pre master secret key를 받아 서버 비밀 키로 복호화
      • 이를 통해 session key를 생성하여 클라이언트와 공유
      • session key를 사용하여 데이터를 대칭 키 암호화 방식으로 주고받음

TLS 1.3

HTTPS 패킷 분석(TLS 1.2와 TLS 1.3)

SNI 란?

SNI 차단이 뭐야? TLS 1.3은 해결책이 될 수 있을까.

인증서 체인

ROOT CA 인증서는 무엇인가?

인증서 체인 🔗

154. [Security] SSL과 인증서 구조 이해하기 : CA (Certificate Authority) 를 중심으로

HTTPS 및 SSL을 사용한 보안 | Android 개발자 | Android Developers

'CS > 네트워크' 카테고리의 다른 글

HTTP 버전  (0) 2023.10.22
쿠키와 세션  (0) 2021.12.26
HTTP의 Stateless  (0) 2021.12.26
네트워크의 구성요소  (0) 2021.07.19
컴퓨터 네트워크 첫 걸음  (0) 2021.07.19

HTTP란?

HTTP란 TCP/IP 네트워크 아키텍처 기준으로 보면 어플리케이션 계층에서 사용되는 프로토콜이다.

클라이언트-서버 구조에서 통신할 때 사용되며, Request와 Response가 존재한다.

HTTP 구조

HTTP의 구조는 크게 Start line + Header + Body로 구성된다.

  • Request
    • Start line
      • HTTP 메소드와, 타겟 경로, HTTP 버전이 명시된다.
    • Header
      • Host, cookie, user-agent 등의 정보가 포함된다.
    • Body
      • 서버로 보낼 정보를 담는다.
      • GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr
  • Response
    • Start line
      • HTTP 버전, 응답 상태 정보가 명시된다.
    • Header
      • 서버 정보, 날짜, 응답에 대한 정보 등이 들어간다.
    • Body
      • 서버가 응답한 리소스가 담겨있다.
      • HTML, JSON, TEXT등 여러 형식이 올 수 있다.
      • HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html... (here comes the 29769 bytes of the requested web page)

HTTP 특징

HTTP/HTTPS 차이

  • HTTP는 암호화 되지 않은 데이터를 전송한다.
  • HTTP에 SSL, TLS을 결합 한 것이 HTTPS이다.
  • HTTPS 웹사이트는 인증된 기관에서 발급한 SSL/TLS 인증서를 획득해야한다.
    • SSL/TLS이란?
      • TLS는 SSL의 업그레이드 버전이다.
      • RSA암호화를 사용한다.

인증과정

  1. HTTPS 웹 사이트를 방문한다.
  2. 브라우저는 서버의 SSL 인증서를 요청한다.
  3. 서버는 public 키가 포함된 SSL 인증서를 보내준다.
  4. 브라우저가 CA의 인증서인지 검증하고, public 키를 이용해서 request를 암호화 한다.
  5. 서버에서 private key를 이용하여 메세지를 해독한다. 그리고 세션키를 암호화해서 브라우저에 전송한다.
  6. 브라우저에서 세션키를 사용해서 서버와 통신한다.

HTTP 버전

HTTP 1.0 / 1.1

  • HTTP의 초기버전(0.9라고 부름)은 한 줄로만 구성되어 있었다.
    • 리소스 요청에 대한 응답만 할 수 있다. (GET 메소드만 존재)
    • ```
    • Request
      GET /target.html
    • Response```
  • HTTP 1.0
    • 헤더가 추가되었다.
    • 버전정보와 메소드 정보를 전송한다.
      • GET, HEAD, POST 메소드
    • 상태 코드(200, 302, 404..)를 응답으로 보내줘 요청에 대한 성공/실패를 알 수 있다.
    • 헤더에 Content-Type을 명시해 HTML 이외에 데이터도 전송할 수 있음
    • 요청 하나당 커넥션을 생성하기 때문에 매번 3-way-handshake을 해야한다.
      • HTTP도 TCP 프로토콜 위에서 동작하므로, 통신을 하려면 3-way-handshake과정을 거쳐야함.
  • HTTP 1.1
    • Persistent connection 추가
      • 지정한 timeout동안 커넥션을 닫지 않는다.
      • HTTP 1.0 단점 개선
    • Pipelining 추가
      • 앞의 요청의 응답을 기다리지 않고 다음 요청을 보냄
      • 응답은 요청을 보낸 순서대로 온다.
    • Head Of Line Blocking (HOLB)
      • 앞의 요청이 너무 오래걸리면 뒤의 요청은 블럭킹 되는 문제가 있다.
    • 헤더 중복 문제

HTTP 2.0

  • HTTP 1.1 의 확장이며 성능개선을 한 프로토콜이다.
  1. 전송 방식 전환
    • HTTP 1.1 에서는 일반 텍스트에 개행문자로 헤더와 바디를 구분했지만 2.0에서는 바이너리 프레임으로 분할해서 전송한다.
    • 바이너리 형식이 전송속도와 파싱속도가 빠르고 오류 발생 가능성이 낮다.
  2. Multiplexed Streams
    • 요청의 프레임이 각 스트림을 통해 전달되고 응답을 받는다.
    • 한 커넥션 안에 여러 스트림이 존재하며, 이전 요청의 응답 여부와 상관없이 동시에 여러 요청을 처리할 수 있다.
  3. Server Push
    • 서버가 클라이언트가 요청하지 않은 리소스를 보내줄 수 있다.
      • *클라이언트에게 필요한
  4. Header Compression
    • 이전에 전송된 Header 를 table로 만들어 저장
    • 이전 Header에 포함된 내용을 제외한 새로운 내용을 허프만 인코딩으로 압축해서 전송
  • HTTP단의 HOLB는 없지만 TCP단의 HOLB는 존재

HTTP 3.0

  • QUIC(Quick UDP Internet Connection)를 기반으로 나온 HTTP의 새로운 버전
  • QUIC
    • UDP 기반의 전송 프로토콜
    • TCP의 단점을 극복하기위해 고안됨

RESTful API

출처

https://velog.io/@neity16/HTTP-HTTP-버전-별-특징#http-10

https://aws.amazon.com/ko/compare/the-difference-between-https-and-http/

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview#http_기반_api

'CS > 네트워크' 카테고리의 다른 글

SSL/TLS란? SNI, Intermediate-Chain  (1) 2023.10.22
쿠키와 세션  (0) 2021.12.26
HTTP의 Stateless  (0) 2021.12.26
네트워크의 구성요소  (0) 2021.07.19
컴퓨터 네트워크 첫 걸음  (0) 2021.07.19

CPU의 구조

  • 명령어 사이클
    1. Instruction Fetch
      • CPU가 다음에 실행될 명령어를 가지고 오는 것이다.
      • IP(Instruction Pointer; PC(Program Counter)라고도 함)에서 다음에 실행될 명령어의 주소를 가지고 있다.
      • ex) Add 3, 5 라는 명령어를 가져온다.
    2. Instruction Decode
      • 명령어의 Operation code를 해독하는 단계이다.
      • ex) Add 를 해독하여 더하기 명령이라는 것을 알아낸다
    3. Operand Fetch
      • 피연산자를 가져오는 단계이다.
      • ex) 3, 5를 가져온다.
    4. Execution
      • CPU가 연산을 수행한다.
  • Instruction FetchInstruction DecodeOperand FetchExecution
  • CPU의 연산 과정
    • CPU에는 3가지 주요 Unit이 있다.
    1. Memory(Storage) Unit
      • 이 유닛은 명령어, 데이터, 중간 결과 등을 저장할 수 있다.
      • 다른 유닛으로 정보를 전송할 때도 쓰인다.
      • 레지스터, 캐시등 크기와 속도가 다른 여러 종류가 있다.
      • 모든 입력데이터와 출력데이터가 메모리 유닛을 통해 전송된다.
    2. Control Unit
      • 다음에 실행될 명령을 Memory Unit으로 부터 가져오고, 해독하여 신호를 ALU로 보내준다.
        • Control Unit은 CPU의 클럭 신호를 입력받아 적절한 명령 신호를 보내준다.
        • ALU가 아니더라도 메모리나 입출력 장치로 신호를 보내는 역할도 한다.
    3. Arithmetic Logic Unit
      •  
      • ALU는 실제로 연산을 수행하는 장치이다.
      • 사칙연산, Shift, 논리연산등을 수행한다.
      • Operation code와 Operand를 받는다.
      • 이렇게 받은 값들을 내부의 가산기, 보수기, 시프터, 오버플로우 검출기를 이용해 계산한다.
        • 가산기(Adder) : 2진수의 덧셈 연산을 수행한다.
        • 보수기 : 보수를 구한다. NOT 논리연산이다.
          • 가산기와 보수기를 사용하여 뺄셈 연산을 수행한다.
        • 시프터 : 시프트 연산을 수행한다.
        • 오버플로우 검출기 : 오버플로우를 검출한다.

컴퓨터가 화면을 보여주는 원리

  1. 그래픽 데이터를 만든다. (이미지, 동영상 등)
  2. 이미지(JPEG, PNG, BMP, GIF 등)를 픽셀 단위로 나누고, 3바이트(2^8 = 0~255, RGB)에 픽셀의 색을 저장한다.
  3. GPU가 이미지 데이터를 처리하고 모니터에 표시할 수 있는 디지털 신호(RGB 신호)로 변환한다.

https://velog.io/@ckstn0777/컴퓨터구조-9htxi9jo

'CS > 컴퓨터구조' 카테고리의 다른 글

컴퓨터의 언어 - 비트  (0) 2021.12.27

파일

소프트웨어 상에서 동작하는 파일은 모두 그렇듯 파일 역시 0, 1로 기록된다. 

png 파일
pdf, apk 파일

UltraEdit을 통해 png, pdf, apk 파일을 열어봤다. 
2진수 비트보다 보기쉽게 16진수로 변환되어 보인다. 

모든 파일은 고유한 포맷을 가지고 있으며 파일 시그니처를 통해 포맷을 기록한다. 
파일 시그니처는 파일의 헤더에 기록된다. (png와 jpg는 footer 시그니처도 가지고 있다)

이렇게 PDF는 25 50 44 46, PNG는 89 50 4E 47 같이 파일 포맷에 맞는 고유한 시그니처가 존재한다. 

시그니처 외에도 파일 헤더에는 파일의 크기, 만든 시간, 접근 권한 등의 정보가 담겨 있다. 

파일 시스템

파일 시스템은 이런 파일과 디렉토리의 CRUD를 관리한다. 

그리고 파일에 대한 접근 방법을 제공하고, 접근 권한을 관리한다. 

또 파일 내용이 손상되지 않도록 무결성을 보장하고, 백업과 복구 작업을 한다.

파일을 보호하기 위한 암호화도 담당한다. 

 

파일 시스템은 어떻게 파일을 저장할까?

  • Continguous Allocation

처음에는 파일을 연속적인 공간에 저장했다. 연속적인 저장장치의 주소를 읽기 때문에 속도는 빠르지만, 파일은 수정을 거듭하며 사이즈가 달라지기 때문에 연속적으로 저장하기 어렵고 단편화 문제도 발생한다.

  • Linked Allocation

파일을 블록단위로 저장하고 각 블록에 다음 블록에 대한 주소를 갖고 있게해 LinkedList 형태로 파일을 읽을 수 있는 방식이다.

  • Indexed Allocation

인덱스를 기록하는 블럭을 하나 두고, 이 index 블록안에 포인터를 보고 파일에 접근하는 방식이다. 

이렇게 저장된 파일에 접근할 때는 파일 테이블을 통해서 접근한다. 

파일 테이블의 블록 번호를 보고 파일에 접근할 수 있다.

그리고 파일 테이블은 디스크 파티션 마다 존재한다 .

 

OS가 파일에 접근하는 법 - File Descriptor

유닉스 계열의 운영체제에서 모든 것은 파일이다. 파일, 디렉토리, 소켓, 등등 모두 파일로 관리된다. 

운영체제에서 파일에 접근할 때 File Descriptor를 사용한다. 

fd = open("test.txt", O_RDONLY);

C언어에서 open으로 파일을 열면 File Descriptor를 반환한다. File Descriptor는 0이 아닌 양의 정수이다. 

파일 디스크립터 값은 파일 디스크립터 테이블의 인덱스값이다. 

파일을 열 때마다 파일 디스크립터 테이블에 파일 테이블에 대한 참조값을 저장하고 인덱스를 반환해준다. 

우리는 fd를 통해 file table의 위치를 찾고 file table의 값을 통해 파일의 위치를 찾아 읽을 수 있다.  

리눅스 - 파일 디스크립터 :: Developer Ahn (tistory.com)

 

 

[운영체제] 파일과 파일 시스템 (velog.io)

[운영체제] File System Implementations (tistory.com)

리눅스 - 파일 디스크립터 :: Developer Ahn (tistory.com)

 

리눅스 - 파일 디스크립터

File Descriptor (파일 디스크립터) [출처: http://dev.plusblog.co.kr/22] 1. 파일 디스크립터 - 시스템으로부터 할당 받은 파일을 대표하는 0이 아닌 정수 값- 프로세스에서 열린 파일의 목록을 관리하는 테이

dev-ahn.tistory.com

 

[운영체제] File System Implementations

이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 테이프: 순차 접근만 가능. 건너뛰기 불가능 하드 디스크, 플래시 메모리: 건너뛰기 가능. 직접 접근 가능한 매체

movahws.tistory.com

 

[운영체제] 파일과 파일 시스템

쉽게 배우는 운영체제 2판 책을 통해 내용을 정리한 글입니다!파일 시스템은 파일과 파일의 집합체인 디렉터리(directory)를 관리한다.유닉스 -> 디렉터리윈도우 -> 폴더파일 시스템은 파일 및 디렉

velog.io

 

'CS > 운영체제' 카테고리의 다른 글

3장 프로세스(PCB, Context Switch, Scheduling, IPC)  (1) 2022.05.15

+ Recent posts