개발관련 도서/Http&Network Basic

제 8장 누가 액세스하고 있는지를 확인하는 인증

prden 2021. 7. 18. 09:05

1. 인증이란?

특정 웹사이트에 들어가기 위해 로그인하는 과정이라고 생각하면 됨. 

인증을 위한 수단으로는 아래의 것들이 있다. 

a. 패스워드 : 본인만 알고 있는 문자열 정보

b. 원타임 토큰 : 본인만이 가지고 있는 기기 등에 표시되는 한 번 쓰고 버리는 패스워드 등의 정보

c. 전자 증명서 : 본인(단말기)만이 가지고 있는 정보

d. 바이오 매트릭스 : 지문이나 홍채 등 본인의 신체 정보

e. IC 카드 등 : 본인 만이 가지고 있는 정보

 

HTTP에서 사용하는 인증 방법은 BASIC인증, DIGEST인증, SSL클라이언트 인증, 폼 베이스 인증 등이 있다. 구체적인 내용은 아래에서 살펴본다. 

 

2.  BASIC 인증

1) BASIC 인증이 필요한 리소스에 리퀘스트가 있을 경우 서버는 401 상태 코드와 함께 인증의 방식(BASIC)과 Request-URI의 보호 공간을 식별하기 위한 문자열을 헤더 필드에 포함해서 리스폰스를 반환한다. 

 

2) 401 상태 코드를 받고 아이디, password 전송하면 :으로 연결한 문장을 Base64라는 형식으로 인코딩을 한다. 

 

3) Authorization 헤더 필드를 포함한 리퀘스트를 수신한 서버는 인증정보가 정확한지 판단하고 Request-URI를 포함한 리소스를 반환

 

4) 암호화가 아니기 때문에 아무런 부가정보 없이 복호화할 수 있다. 

 

3. DIGEST인증

1) DIGEST 인증에서는 챌린지 리스폰스 방식이 사용되고 있어서 BASIC 같이 패스워드를 있는 그대로 직접 보내는 일은 없다. 

 

2) 챌린지 리스폰스 방식은 최초에 상대방에게 인증 요구를 보내고 상대방 측에서 받은 챌린지 코드를 사용해서 리스폰스를 계산한다. 이 값을 상대에게 송신하여 인증하는 방법이다. 

 

4. SSL 클라이언트 인증

1) HTTPS 클라이언트 인증서를 이용한 인증 방식으로 사전에 등록된 클라이언트에서의 액세스인지 아닌지 확인할 수 있다. 

 

2) 인증이 필요한 리소스의 리퀘스트가 있었을 경우 서버는 클라이언트에게  클라이언트 증명서를 요구하는 Certificate Request 메시지를 보낸다. 이에 유저는 인증서를 보내고 서버는 인증서를 검토 후 검증 결과가 정확하다면 클라이언트의 공개키를 취득한다. 그 이후 HTTPS에 의한 암호를 개시한다. 

 

3) SSL 클라이언트 인증은 2-factor 인증에서 사용된다. 2-factor인증이란 패스워드라는 한 개의 요소 만이 아니라 다른 정보를 병용해서 인증하는 방법이다. 

 

5. 폼 베이스 인증

1) 클라이언트가 서버상의 웹 애플리케이션에 자격 정보를 송신하여 그 자격 정보의 검증 결과에 따라 인증을 하는 방식이다. 

 

2) BASIC 인증과 DIGEST 인증은 사용상의 문제와 보안상의 문제로 거의 사용하지 않고 SSL 클라이언트 인증도 널리 사용되는 인증 방식은 아니다.  폼 베이스 인증방식이 흔히 사용된다. 

 

3) 폼 베이스 인증방식은 세션 관리를 위해 쿠키를 사용하는 방식을 일반적으로 사용한다. (세션 관리와 쿠키를 사용해 HTTP에 없는 상태 관리 기능을 보충한다. )

 

4) 일반적인 방식은 자격정보(ID, Password)를 리퀘스트 송신하면 서버 측은 유저를 식별하기 위해 SessionId를 발행하고 이 세션 아이디와 유저의 인증정보를 서버 측에 기록한다. 클라이언트에 송신할 때는 Set-Cookie 헤더 필드에 세션 ID를 저장해서 리스폰스를 반환한다. SessionId 가 도난당하거나 쉽게 유추되지 않도록 하기 위해 어려운 문자열을 사용, 서버 측에서 유효기간을 두어 관리한다. 또한, 크로스 사이트 스크립팅 등의 취약성이 존재한 경우라도 피해를 줄이기 위해 쿠키에는 HttpOnly 속성을 부여해둔다. 

 

5) 서버 측에서 세션 ID를 받은 클라이언트는 쿠키로 저장해두고 다음번에 서버에 리퀘스트를 송신하는 때에는 브라우저가 자동으로 쿠키를 송출하기 때문에 세션 ID가 서버에 송신된다.