정보보안

Apache2에서 Digest 인증 설정

야마히코 2016. 11. 25. 03:24

블로그 첫 글입니다.

제가 학교에서 공부한 내용을 복습할 겸 하는 차원에서 하나씩 올려가도록 하겠습니다.

이번에 올리는 건 Apache2에서 Digest 인증 설정하는 방법입니다.

HTTP에서는 Basic 인증, Digest 인증 두 가지의 인증 방식이 있는데요.

Basic 인증은 암호화가 되어 있지 않아 와이어샤크와 같은 패킷 분석 프로그램에서 패스워드가 그대로 추출되는 위험성이 있는데 반해, Digest 인증은 MD5로 암호화해서 패스워드를 보내기 때문에 훨씬 안전한 인증 방식이라고 할 수 있습니다.

자세한 건 검색해보시면 많이 나오니 참조하시면 될 것 같습니다.(나중에 시간 있으면 그것도 업데이트할지도...?)

그러면 본격적으로 Apache2에서 Digest 인증을 설정하는 방법에 대해서 설명하도록 하겠습니다.

참고로 VirtualBox에서 Ubuntu 16.04를 설치한 상태이며, 그 외에는 아무것도 없는 깨끗한 상태로 가정한 후 설치하도록 하겠습니다.

보통 초보자분들은(저 포함)처음 설치할 때부터 검색을 하실 텐데 나오는 사이트들은 기본적으로 필요한 정보들이 안 써 있는곳이 많더라구요..

아무튼, 갈수록 잡설이 길어지는 것 같으니 이제 진짜로 쓰겠습니다.

우선은 우분투에 Apache2를 설치합니다.  Apache2를 설치할 때는 이 커맨드를 쓰시면 됩니다.

# apt-get install apache2

이 커맨드를 쓰신 후 나오는 질문에 y를 누르시면 자동으로 설치가 끝납니다.

일본어긴 하지만 딱히 신경 안 쓰셔도 됩니다. 어차피 나오는 건 다 똑같은지라...

그리고 앞으로 사용하게 될 vim을 설치하겠습니다. vim도 apache2와 마찬가지로 

# apt-get install vim

으로 설치하시면 됩니다. 똑같은 내용이니 스샷은 생략...

그러면 다음에는 모듈을 적용시키도록 하겠습니다. Basic 인증은 그냥 되는데 Digest 인증을 사용하기 위해서는 모듈이 하나 필요한데요. 그 모듈이란

auth_digest_module 이란 거구요.

이걸 apache2설정 파일에 써 넣으셔야 합니다.

/etc/apache2/ 디렉토리에 있는 apache2.conf 파일 적당한 곳에

LoadModule auth_digest_module /usr/lib/apache2/modules/mod_auth_digest.so

이걸 써 넣으시면 됩니다.

그러면 apache2.conf파일을 한번 보도록 하죠.

# cd /etc/apache2/ 로 아파치2 디렉토리로 이동 후

# vim apache2.conf 커맨드로 conf파일에 실제로 써넣도록 합니다.

vim 사용법은 검색하면 바로 나오니 참조하시길...

이렇게 빈 곳 아무곳에나 써 넣으시면 됩니다.

저는 맨 아래쪽에 끼워넣었습니다.

이 파일에서 한가지 작업할 것이 더 있는데, 디렉토리 설정을 변경해 주는 겁니다.

나중에 .htaccess 라는 파일을 사용하게 되는데, 이 파일을 사용하기 위해선 디렉토리 설정을 하나 바꿔줄 필요가 있거든요.

파일 내용을 찾아보시면, 

<Directory /var/www>

  Options Indexes FollowSymLinks

  AllowOverride None

  Require all granted

</Directory>

이런 곳이 있을 건데요.

여기서 디렉토리와 AllowOverride 설정을 바꿔줍니다. 아래에서 Digest 인증용의 디렉토리를 하나 만들건데요. 여기서 그 디렉토리로 설정을 써야 합니다. 여기서는 Digest라는 디렉토리 이름으로 하겠습니다. 그러면 이런 식으로 변경해줍니다.

<Directory /var/www/html/digest>

  Options Indexes FollowSymLinks

  Allow Override All

  Require all granted

</Directory>

이렇게 변경후 저장해주시면 앞으로 나올 .htaccess 를 사용 가능하게 됩니다.

잠시 파일을 살펴보면 이렇게 되어 있네요.

참고로 Apache2 설정 파일을 수정하시면 항상 서버를 재시작 하셔야 하는데요.

서버 재시작 커맨드는

# service apache2 restart

로 하시면 됩니다. 이걸로 서버를 재시작하시구요.

다음으로, Digest 인증을 적용할 디렉토리와 파일을 만들도록 하겠습니다.

Apache2를 설치했을시 기본 디렉토리는 /var/www/html/ 이며 여기에서 적당히 디렉토리와 파일을 만들어서 쓰시면 됩니다.

그러면 먼저 디렉토리를 하나 만들겠습니다. 디렉토리 이름은 digest로 하죠.

# cd /var/www/html/ 로 html디렉토리까지 들어간 후

# mkdir digest 를 실행하면 digest 디렉토리가 만들어집니다. 그리고

# cd digest 로 digest 디렉토리에 들어가서 본격적으로 인증에 필요한 파일을 만들도록 하죠.

먼저 만들 파일은 패스워드 파일입니다.

패스워드 파일은 이런 형식입니다.

# htdigest -option filename "realm" username

이렇게만 보면 뭔 소린지 잘 모르시겠죠. 예를 써보도록 하죠.

# htdigest -c digestpass "Sparta" kim

-c 옵션은 새로운 패스워드 파일을 만들 때 쓰는 옵션이구요. 나중에 이 패스워드 파일 안에 새로운 유저를 추가할 때는 생략하셔도 됩니다.

.filename이 패스워드 파일 이름이구요.

realm이라는건 영역인데 나중에 만들 .htaccess 파일에 저 realm을 이용해야 합니다. 그건 나중에 보시도록 하구요.

username이 나중에 페이지에서 인증할 때 쓸 아이디입니다.

커맨드를 저렇게 입력하시면 새롭게 패스워드를 입력하라고 나오는데요.

그게 지정한 아이디에 쓸 패스워드입니다. 확인을 위해 두 번 입력하도록 되어 있구요.

그러면 먼저 한번 유저를 만든 후 다음 유저도 하나 추가한 상태를 보도록 하겠습니다.

이런 식으로 패스워드 파일에 유저와 패스워드를 추가하시면 되구요.

여담으로 패스워드 파일의 내용을 훑어보도록 하겠습니다.

음...멋진 외계어군요. 암호화가 잘 된 듯 합니다. 아이디와 렐름명은 남아있긴 하지만...

그러면 다음으로 .htaccess 파일을 만들도록 하겠습니다.

같은 디렉토리에서 그대로

# vim .htaccess 를 입력해서 파일을 만든 후 아래와 같이 입력하시면 됩니다.

AuthType Digest

AuthName "Sparta"

AuthUserFile /var/www/html/digest/digestpass

Require valid-user

아까 설정한 렐름명이 AuthName에 입력되어야 합니다.

AuthUserFile에 패스워드 파일의 경로가 입력되어야 하구요.

여기서 잠시 항상 절대경로를 쓰고 있는데 상대경로를 쓰셔도 되긴 할 겁니다 아마...

그런데 제가 그걸 몰라서...;

아무튼, 일단 입력하시면 이런 모양이 됩니다.

다음으로 적당히 html 파일을 하나 만들어보죠. 인증에 성공하면 나오는 페이지입니다. index.html 이라는 이름으로 하나 만들겠습니다.

# vim index.html 커맨드로 파일을 만들고

적당히 이런 식으로 소스를 쓰도록 하죠.

이걸로 Digest 인증 설정이 완료됩니다.

그러면 한번 제대로 설정이 되어 있는지 실제로 사이트에 접속해보도록 하겠습니다.

아까 만든 파일 이름이 index.html이고 digest 디렉토리에 들어있었으니 접속은 

http://ip주소/digest/index.html로 하면 됩니다. 현재 제 ip주소는 192.168.0.7이네요.

그러면 http://192.168.0.7/digest/index.html에 접속을 해보도록 합시다.

이렇게 아이디와 패스워드 입력하는 화면이 나오네요. 그럼 여기에 아까 설정해둔 아이디와 패스워드를 입력하고 전송하면

접속이 잘 됐습니다. 참고로 아이디와 패스워드가 틀리다면

재입력 화면이 세 번 뜬 후 이렇게 접속 에러가 뜹니다.

아무래도 Digest 인증이 잘 적용된 모양이군요.

이런 식으로 필요한 웹페이지에 Digest 인증을 적용하시면 보다 안전한 이용이 가능하실 겁니다.

여기서 잠깐 MD5 암호화가 잘 됐는지 확인해보도록 하겠습니다.

와이어샤크를 이용해서 웹서버의 패킷을 캡처해보면...

이렇게 나옵니다. 유저명과 렐름은 표시가 되지만 패스워드는 알 수 없는 외계어로 암호화가 잘 된 모양입니다. 다행이네요 ㅎㅎ

그러면 다음 포스팅은 아마 Basic 인증이 될 것 같군요.

언제가 될진 모르겠지만 시간이 되면 올리도록 하겠습니다.

그럼 안녕히...


참고 사이트

http://ubuntu-1110.blogspot.kr/2012/01/ubuntu-1110htaccess.html

http://www.adminweb.jp/apache/allow/index8.html