• ...
  • HTTP Session 이란?
    • 서버가 클라이언트를 식별하는 방법. 
    • “클라이언트가 서버에 접속해 있는 상태”를 하나의 Session 이라는 단위 관리.
    • Session은 서버에 저장이 되고, 그 이후 해당 SessionID 가 내려감. 클라이언트에서는 해당 Cookie가 셋팅 됨.
    • 그럼 TCP Session 는 ??? socket의 PID를 기반으로 관리 ???
    • HTTP는 기본적으로 Thread가 tcp socket 비연결 지향이기 때문에, Keep-Alive 옵션이 제공.
      • Connectionless : 클라이언트가 서버에 요청을 하고 서버가 클라이언트에게 응답을 보내면 접속을 끊는다.
      • Stateless : 통신이 끝나면 상태 정보를 유지하지 않는다.
      • 즉, 매번 socket(port)를 열어야 하는 비효율적인 구조에서 재요청시 이미 열려 있는 socket(port)에 전송가능.
  • HTTP Header Authorization
    • Basic, Bearer, ...
  • HTTP Header Content-Type
    • 예) application/x-www-form-urlencoded;charset=UTF-8
      • Web <form> Elements 부터 POST 요청시, 표준 MIME type 이 바로 "application/x-www-form-urlencoded"
      • ServletContainer는 Content-Type이 "application/x-www-form-urlencoded" 이면, Request Body를 Map으로 변환
      • ex) "key-value 형태" : key=value&key=value&key=value&key=value&key=value&...
    • 예) application/json
  • HTTP Cache
    • Cache-Control: public, max-age=3600
      • public이면 공유 캐시(또는 중개 서버)에 저장해도 된다는 뜻이고 private이면 브라우저같은 특정 사용자 환경에만 저장하라는 뜻입니다.
      • 3600초까지는 서버에 요청없이 캐쉬데이터를 사용하며, 3600초 경과 후에는 서버에 꼭 유효성검사를 해
    • Age: 60
      • Age 헤더는 캐시 응답 때 나타나는데, max-age 시간 내에서 얼마나 흘렀는지 초 단위로 알려줍니다.
    • Expires: Thu, 26 Jul 2018 07:28:00 GMT
      • Cache-Control과 별개로 응답에 Expires라는 헤더를 줄 수도 있습니다. 응답 컨텐츠가 언제 만료되는지를 나타내며, Cache-Control의 max-age가 있는 경우 이 헤더는 무시됩니다.
    • Etag: W/"3bf2-wdj3VvN8/CvXVgafkI30/TyczHk"
      • 컨텐츠가 바뀌었다면 ETag 헤더 값도 34567로 바뀝니다. 그러면 클라이언트가 이 응답 내용이 달라졌구나를 깨닫게 되어 캐시를 지우고 새로 컨텐츠를 내려받을 수 있게 됩니다.
    • Last-Modified : ...
    • If-None-Match: W/"3bf2-wdj3VvN8/CvXVgafkI30/TyczHk"
      • 서버보고 ETag가 달라졌는 지 검사해서 ETag가 다를 경우에만 컨텐츠를 새로 내려주라는 뜻입니다.
      • 만약 ETag가 같다면 서버는 304 Not Modified를 응답해서 캐시를 그대로 사용하게 합니다.
  •  HTTP Chunked
    • 요청 : TE
    • 응답 : Transfer-Encoding
      • 예) chunk#1 , chunk#2 , chunk#3 , ... , Last chunk(0<CR><LF>), Trailer(Content-MD5: ... <CR><LF>).
    • 응답 Body size를 알 수 있는 3가지 방식
      • 클라이언트의 요청 후에 응답 body를 수신하다가 연결이 종료되었다면, 종료되기 전까지 받은 데이터의 크기가 body의 size.(HTTP 1.0)
      • 응답 헤더의 Content-Length: 헤더를 통해서 body size 얼마인지 클라이언트에 알려 줌.
      • Chunked 방식을 통해서 마지막 body 데이터로 0<CR><LF>를 전송
    • 사용처
      • 서버에서 전체 응답 데이터를 구성하는데 시간이 오래걸려, 일부 구성된 데이터를 먼저 응답할 때.
      • 서버에서 전체 응답 데이터를 구성하는데, 데이터 완료시그 전체 사이즈를 정확히 알수 없어서 일부 완료된 데이터를 먼저 응답할 때.
  • ...
  • 공개키 인프라구조
  • 네트워크 암호화 개론
    • 부분 암호화  : 암호Key 안전공유이슈
    • 전송계층 암호화  : 모든데이터 암호화 ex) SSL, TLS, VPN, ...
    • 대칭키(비밀키) : 암호키 == 복호키 // 성능빠름, 유출위험
    • 비대칭키(공개키+비밀키): 암호키 != 복호키 // 성능안빠름, 유출낮음, "PublicKey + PrivateKey"
  • SSL 시나리오
    • 1) client -(https)-> server
    •  2) 아마도? server -(인증서)-> client
    •  3) 아마도? client : '인증서'의 '도메인' 비교 및 신뢰판단
      • ("보안인증서출처" == 'http://www.test.co.kr')
      • (그래서? 000.111.222.333 IP 으로 HTTPS하면~ 잘안됨?)
    • 4) 아마도? client : '인증서'의 '발급기관PubKey' 확인 및 신뢰판단
      • (SSL/TLS 지원 브라우저 client는 'RootCA공개키' 가지고 있음)
    • 4-1) server 에서 client 의 신원확인 하는법
      • client : ('Server공개키'암호화)&('Client비밀키'암호화) -> server : ('Client공개키'복호화)('Server비밀키'복호화) 
    •  4-2) 아마도? client 에서 '인증서' 의 확인 하는법
      • client : '인증서' -(RootCA공개키 복호화)-> 성공 (이것이 "전자 서명 인증서" ???)
  • TLS 시나리오
    •  TLS : SSL(Secure Sockets Layer) 3.0기반의 네트워크 보안 (데이터 암호화) 기술. // 그냥 SSL이라 불러.
    • TLS 핸드쉐이크 : "비대칭키(공개키+비밀키)" 방식으로 -> "대칭키(비밀키)"를 공유 -> 안정성 과 성능 모두 GoodUp!!!
    • 시나리오 :
      • 1) 클라이언트 -> (Cipher Suite List:암호가능목록) & (Session아이디) -> 서버
      • 2) 서버 -> (Cipher Suite:특정 암호방식) & (인증서) & (난수) -> 클라이언트
        • Client가 Server의 '공개키'(인증서)를 얻어옴
        • 제3의 상위 신뢰된 인증기관(RootCA:Certificate Authority) 인 "공인인증기관" 의 서명받은것 == 공인인증서
        • SSL/TLS 지원 Client는 'RootCA공개키'를 가지고 있음 (인증서를 'RootCA공개키'으로 복호화확인)
      • 3) 클라이언트 : '인증서'가 "신뢰된 인증기관"인지? 확인 후, 다음절차진행
      • 3) 클라이언트 : Server난수 + Client난수 => 대칭키(비밀키) 생성 (pre master secret)
      • 4) 클라이언트 -> 대칭키(비밀키) -> {인증서(비대칭키(공개키)) 암호화} -> 서버
      • 4) 클라이언트 & 서버 : (pre master secret) -> {일련의과정} -> (master secret) -> {생성} -> (session key)
      • 5) 핸드쉐이크 종료
      • 6) 대칭키(비밀키) 으로 "모든데이터를 암호화" 통신~
      • 7) 대칭키(비밀키)는 언제까지 유효??? HTTPS 커넥션을 어떻게 관리???
        • pre master secret 값을 -> master secret 값으로 만듬 -> master secret는 session key를 생성 -> session key 값을 이용해 세션유지!!!
        • 세션종료 : 데이터의 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알려준다. 이 때 통신에서 사용한 대칭키인 session key 를 폐기한다.
  • 실습) 인증서 만들어 보기!

-끝-

 

(% 별책부록 : HTTPchunked(장).pdf)

(% 별책부록 : SPDY(장).pdf)

'통신과 프로토콜 그리고 보안' 카테고리의 다른 글

JWT (JSON Web Token)  (0) 2020.10.19
OAuth  (0) 2019.11.10
SMTP , (POP3) , (IMAP)  (0) 2019.11.10
SSH (TELNET) , (scp), (rsync)  (0) 2019.11.10
인터넷(Internet) 과 웹(Web)  (0) 2019.10.27

+ Recent posts