Web Dev/7. 네트워크
HTTP 완벽 가이드 14장 보안 HTTP
hYhY1234
2021. 2. 28. 15:55
728x90
- HTTP 만으로 기밀데이터가 있는 요청을 웹상에서 하는 것은 어렵다
- 이를 위해 HTTP와 디지털 암호화 기술을 결합해야한다
- HTTPS
- HTTP를 안전하게 만드는 방식 중에서 가장 인기 있는 것
- HTTPS를 사용하면 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다. HTTPS는 HTTP 하부에 전송 레벨 암호 보안 계층을 제공함으로써 동작
- 공개키 암호법
- 한쌍의 호스트가 하나의 인코딩/디코딩 키를 사용하는 것이 아니라, 두개의 비대칭 키를 사용한다
- 인코딩 키는 공개되어있어 누구나 평문을 암호화 할 수 있으나, 이를 해독하는 것은 디코딩 키를 가진 호스트만 할수있다.
- 키의 분리를 통해 메시지의 인코딩은 누구나 할수 있되, 메시지 디코딩은 소유자만 할 수 있다는 것이 장점디아.
- 대칭키의 경우보다 적은 수의 키가 필요하다
- 거대한 공개 키 인프라(PKI)표준화 작업을 통해 표준화된 공개키 기술 묶음을 만들고 있고, 이를 통해 보안 프로토콜의 전세계의 모든 컴퓨터 사용자에게 적용하게 하는 것을 가능하게 했다.
- RSA 알고리즘ㅁ
- 공개키 암호화의 핵심 세가지는 아래의 세개가 털려도 비밀키를 계산하지 못하게 하는 것이다.
- 공개키(공개되서..)
- 가로채서 얻은 암호문(네트워크 스누핑 해가지고...)
- 메시지랑 암호문(인코더에 해커가 임의로텍스트를 넣고 실행해서 획득하는 것)
- MIT에서 개발한 RSA로 이를 해결할 수 있따.
- 암호를 크래킹해서 개인키를 찾아내는건 computer science분야에서 가장 어려운 문제중하나와 맞먹는다. 이거 할줄알면 대박난다.
- 공개키 암호화의 핵심 세가지는 아래의 세개가 털려도 비밀키를 계산하지 못하게 하는 것이다.
- 근데 공개키 암호화가 조금 느린 느낌이있다고 한다. 그래서 대칭과 비대칭을 혼합해서 사용한다.
- 의사소통 채널을 수립할때는 편리하도록 보안/편리성을 위해 공개키 암호화를 사용하고
- 이렇게 안전하게 만들고나면 무작위로 대칭키를 생성해서 교환함(공개키로 채널을 생성했으니 털릴확률이 확떨어짐)
- 그리고 나서는 데이터를대칭키를 통해서 암호화해서 사용한다.
- 즉 대칭키를 교환할때 공개키 암호화 방식을 적용한다.
- 디지털 서명
- 암호체계는 메시지를 암호화하고 해독하는 것뿐 아니라, 누가 메시지를 썼는지 알려주고 그 메시지가 위조되지 않았음을 증명하기 위해 메시지에 서명하게 하는데도 이용할 수 있다.
- 서명 암호 체크섬이다.
- 서버 인증을 위해 인증서 사용하기
- 사용자가 HTTPS를 통한 안전한 웹 트랜잭션을 시작할 떄, 최신 브라우저는 자동으로 접속한 서버에서 디지털 인증서를 가져온다
- 만약 서버가 인증서를 갖고 있지 않다면 보안 커넥션은 실패한다
- 서버인증서가 가지고 있는 내용
- 웹사이트의 이름과 호스트명
- 웹사이트의 공개키
- 서명 기관의 이름
- 서명 기관의 서명
- 브라우저가 인증서를 받으면 서명 기관을 검사한다. 신뢰할만한 서명 기관이면 브라우저는 해당 서명의 공개키를 이미 알고있고, 브라우저는 서명을 검증한다
- HTTPS의 세부사항
- HTTP의 가장 유명한 보안버전이다
- 널리 구현되었으며 주류 상용 브라우저와 서버에 구현되어있다
- HTTPS를 통해 웹기반 전자상거래의 고속 성장을 이끌고 있다.
- HTTPS는 그냥 보안 전송 계층을 통해서 전송되는 HTTP이다
- HTTP는 그냥 TCP 계층을 거쳐서 인터넷으로 데이터를 쏘는데
- HTTPS는 보내기전에 SSL/TLS 계층(보안계층)으로 데이터를 보내서 거기서 암호화 한번하고 데이터를 네트워크상으로 내보낸다.
- 현재 보안 HTTP는 선택적이라, 웹서버로 요청을 보낼때, 웹서버한테 HTTP의 보안 프로토콜 버전을 수행한다고 말해줘야하는다, 이는 URL의 스킴(http, https)이걸로 한다.
- 웹브라우저등의 클라이언트는 웹리소스에 대한 트랜잭션 수행을 요청하면 우선 스킴을 검사한다
- 그냥 http면 서버의 80포트로 연결하고, 그냥 원래 하던대로 http명령을 전송한다
- https면 443포트로 연결하고, 서버랑 바이너리 포맷으로 된 몇몇 SSL 보안 매개변수를 교환하면서 핸드셰이크를 하고,암호화된 HTTP명령을 보낸다.
- 보안 HTTPS 트랜잭션은 항상 서버 인증서를 요구한다
- stackoverflow.com/questions/2645009/binary-protocols-v-text-protocols
binary protocols v. text protocols
does anyone have a good definition for what a binary protocol is? and what is a text protocol actually? how do these compare to each other in terms of bits sent on the wire? here's what wikipedia...
stackoverflow.com
- 프락시를 통한 보안 트래픽 터널링
- 클라이언트는 종종 그들을 대신하여 웹서버에 접근해주는 웹 프락시 서버를 이용한다.
- 그런ㄴ데 클라이언트가 서버로 보낼 데이터를 서버의 공개키로 암호화하면 프락시는 더이상 HTTP헤더를 읽을 수가 없다
- 그러면 이 프락시는 요청을 어디로 보내야하는지 알수가 없다
- 이를 해결하기 위한 인기있는 기법은 HTTPS SSL 터널링 프로토콜이다. 이를 통해 클라이언트는 먼저 프락시에게 자신이 연결하고자하는 안전한 호스트와 포트를 말해준다. 클라이언트는 이내용을 프락시가 읽을 수 있도록 암호화가 시작되기 전의 평문으로 말해준다.
- HTTP connect라 불리는 새로운 확장 매서드를 이용해서 평문으로 된 종단 정보를 전송하기 위해 사용하고, 프락시에게 희망하는 호스트와 포트번호로 연결응ㄹ 해달라고 말해준다. 그러고 나면 클라이언트와 서버사이에서 데이터가 직접적으로 오갈수있는 터널ㅇ이 생성된다. 이러고나면 클라이언트는 프락시로부터 응답을 받고, 제대로 커넥션이 생성됬다면, 이제 뭔가를시작한다.