본문 바로가기
개발

[HTTP 완벽 가이드] 14장 보안 HTTP 14.5~14.9

by soyooooon 2025. 1. 15.
반응형

디지털 서명

디지털 서명은 보통 비대칭 공개키에 의해 생성된다. 요약에 사용자의 개인 키를 매개변수로 하는 서명 함수를 적용하여 메시지와 함께 전송한다. 메시지가 위조된 것이 아닌 것을 확인하고자 공개키를 이용한 역함수를 적용한 후 가지고 있는 버전의 요약과의 일치여부를 판단한다.

디지털 인증서

디지털 인증서는 신뢰할 수 있는 기관으로부터 보증 받은 사용자나 회사에 대한 정보를 담고 있다. 디지털 인증서는 대상의 이름, 유효 기간, 인증서 발급자, 인증서 발급자의 디지털 서명 등의 기본적인 내용들을 담고 있다. 디지털 인증서에 대한 세계적인 단일 표준은 없지만, X.509라는 표준화된 서식에 대부분의 인증서를 저장하고 있다.

HTTPS를 통한 웹 트랜잭션을 시작하게 되면 브라우저는 접속한 서버에서 디지털 인증서를 가져오고 만약 인증서가 없을 경우 보안 커넥션은 실패한다. 브라우저는 인증서를 받은 후 서명 기관을 검사한다. 신뢰할만한 기관이라면 브라우저는 공개키를 이미 알고 있는 상태일 것이고, 모르는 곳이라면 신뢰를 확인하기 위해 대화상자를 띄운다.

HTTPS

HTTPS는 보안 전송 계층을 통해 전송되는 HTTP이다. HTTPS는 HTTP 메시지를 TCP로 보내기 전에 암호화를 위해 보안 계층으로 보낸다. 보안 계층은 SSL과 TLS로 구성되었으며 모두 의미하는 의미에서 SSL로 부르곤 한다. URL이 HTTP 스킴을 가지고 있을 경우 80 포트로 연결되고 HTTP 명령을 전송한다. 반면 HTTPS 스킴을 가지고 있을 경우 443 포트로 연결하고, 서버와 바이너리 포맷으로 된 SSL 보안 매개변수를 교환하면서 암호화된 HTTP 명령을 보낸다. 핸드셰이크가 완료되면 SSL 초기화는 완료되며 클라이언트는 요청 메시지를 보안 계층에 보낼 수 있으며 이 메시지는 TCP로 보내지기 전에 암호화된다.

서버 인증서

SSL은 통신을 시작하기 위해 많은 양의 핸드셰이크 데이터를 주고받는다. SSL은 서버 인증서를 클라이언트로 전달하고 클라이언트 인증서를 서버로 보내는 상호 인증을 지원하지만, 요즘에 클라이언트 인증서는 많이 사용되지 않는다. 서버 인증서는 조직의 이름, 주소, 서버 DNS 도메인 이름 등의 정보를 보여주며 X.509 v3에서 파생된 인증서이다.

사이트 인증서 검사

넷스케이프가 제안한 웹 서버 인증서 검사를 위한 알고리즘은 웹브라우저 검사 기법 대부분의 기초를 구축했다.

알고리즘의 수행 단계로, 첫 번째는 인증서의 시작 및 종료일을 검사한다. 두 번째로 서명자의 신뢰도를 검사한다. 모든 인증서는 서버를 보증하는 CA(Certificate Authority)에 의해 서명되어 있는데, 누구나 인증서를 생성할 수 있기는 하지만 브라우저는 신뢰할 만한 CA로부터 서명된 인증서인지를 확인하고 만약 그렇지 않다면 경고를 보여준다. 다음으로는 CA의 공개키를 서명에 적용하여 체크섬과 비교하면서 인증서의 무결성을 검사하고 마지막으로 사이트 신원 검사를 위해 인증서의 도메인 이름이 서버의 도메인 이름과 비교하여 맞는지를 검사한다.

OpenSSL

OpenSSL은 SSL과 TLS의 가장 인기 있는 오픈 소스 구현이며 강력한 다목적 암호법 라이브러리이다. HTTPS 클라이언트를 작성하기 위해 OpenSSL 패키지를 사용하며, 클라이언트는 서버와 SSL 커넥션을 맺고, 서버로부터 가져온 신원 정보를 출력하고, HTTP GET 요청을 보안 채널을 통해 보내고, HTTP 응답을 출력하는 방식으로 동작한다.

프락시를 통한 보안 트래픽 터널링

많은 회사가 기업 네트워크와 공공 인터넷을 잇는 경계에 보안을 위한 프락시를 설치하는 것처럼 클라이언트는 종종 웹 프락시 서버를 이용하여 웹 서버에 접근한다. 하지만 클라이언트가 서버로 보내는 데이터를 서버 공개키로 암호화하기 시작했다면 프락시는 HTTP 헤더를 읽을 수 없고 프락시는 요청을 어디로 보내야 하는지 알 수 없게 된다. 때문에 HTTPS가 프락시와도 잘 동작할 수 있도록 HTTPS SSL 터널링 프로토콜을 사용한다. CONNECT 확장 메서드를 통해 프락시에게 희망하는 호스트와 포트번호로 연결을 요청하며, 완료되면 데이터가 클라이언트와 서버 사이에서 직접적으로 오갈 수 있도록 터널을 만든다. 프락시는 요청을 평가해서 유효한지, 허가된 것인지 확인하고 요청을 처리한다.

반응형