Apache WebDAV 서버 구축하기(SSL)
환경: Windows7 64bit, Apache2.2.25
윈도우는 IIS를 이용해서 webdav서버를 구성할수있다.
그런데 내가 설정을못하는건지 아무리 건드려봐도 접속부분에서 오류가 생긴다.
(로컬네트워크에선 괜찮지만 외부접속이라든지 스마트폰에서 접속시 비정상작동..) 또한 왠지 윈도우가 무거워지는거같으며, 나처럼 각 폴더마다 사용자권한을 부여해주려면 계정을 건드려줘야해서 불편했다.
그래서 찾아보던중 친숙한 아파치웹서버를 이용해서 WebDAV를 손쉽게 구축할수 있고, 너무나 깔끔하게 접속이 잘된다.
일단 아파치를 다운받아 설치가 다되있다고 가정하고 포스팅함.
( C:\Apache2.2 디렉토리에 설치했다고 가정)
1. LockDB설정을 위해 C:\Apache2.2\var 폴더 생성
2. conf/httpd.conf 를 편집해
webdav구동에 필요한 모듈을 주석해제처리함.
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_lock_module modules/mod_dav_lock.so
.....
Include conf/extra/httpd-dav.conf
.....
3. 사용자 추가
커맨드(cmd)명령창 C:\apache2.2 디렉토리 위치에서..
apache2.2> bin\htdigest -c 파일명 AuthName 아이디
사용예) bin\htdigest.exe -c WEBDAV_USER WEBDAV_LUUAZ luuaz
- AuthName은 httpd-dav.conf설정할때 필요하며, 로그인시 표시됨.(이름표붙인다고 생각하면됨)
- -c옵션은 최초생성할때옵션이다. 두번째아이디생성부터 -c옵션을 붙이면안되며,
붙일시 기존에 생성했던 아이디는 다 없어집니다.
- 암호변경: -c옵션을 제거하고 동일한 명령을 내리면 암호를 변경함.
4. 그룹 추가
* 그룹은 메모장이나 에디터로 수동으로 생성하면 된다.
(ex: WEBDAV_GROUP으로 생성)
admins: luuaz
users: simpsons tvg test
- admins와 users의 그룹을 만들고 각사용자를 그룹으로 추가함.(구분자는 공백)
5. conf/extra/httpd-dav.conf 설정
* 이 예제는 H드라이브를 /home으로 지정합니다.
* admins그룹은 읽기/쓰기/수정권한을 모두주며 그외는 읽기권한만 줍니다.
# Alias를 설정합니다. H드라이브를 /home으로 연결합니다.
Alias /home "H:/"
<Directory "F:/">
Dav On
Order Allow,Deny
# 내부네트워크에서만 공유할시
# Allow from 192.168.0.0/16 127.0.0.1 형식으로!
Allow from all
# AuthType은 Digest인증으로 변경하고 AuthName으로 webdav이름을 설정합니다.
AuthType Digest
AuthName WEBDAV_LUUAZ
# 이전단계에서 생성한 user와 group파일경로를 설정합니다.
AuthUserFile "C:/Apache2.2/WEBDAV_USER"
AuthGroupFile "C:/Apache2.2/WEBDAV_GROUP"
AuthDigestProvider file
# FollowSymLinks는 리눅스에 심볼릭링크용으로 사용하며 (윈도우는 뭔짓을해도 사용불가, 사용할수 있는 방법이 있으면 알려주세요)
Options FollowSymLinks Indexes
# !!읽기 권한설정!! 읽기권한을 설정합니다.
<Limit HEAD GET OPTIONS PROPFIND>
# Require valid-user로 하면 사용가능한 유저에게 모두 부여합니다.
Require user luuaz
</Limit>
# 쓰기권한설정!! admins그룹만 허용합니다.
# 아래 Limit부분은 예제용이며
# <LimitExcept HEAD GET OPTIONS PROPFIND>과 동일합니다.
<Limit POST MKCOL PUT DELETE LOCK UNLOCK COPY MOVE PROPPATCH>
Require group admins
</Limit>
</Directory>
6. Apache Monitor에서 재시작.
참고사항!
1. 포트 및 서버네임변경
* httpd.conf에서...
Listen 8822
...
ServerName 127.0.0.1:8822
...
2. 최상위경로 인덱스 막기.
* 보안을 위해 최상위경로(/)의 파일인덱스권한을 없앤다.
* httpd.conf -> <Directory /> 에서...
Options에있는 Indexes 제거
3. 파일인덱스목록화면이 자세히보기가 아닌 이름만 나온다.
자세히보기(이름,날짜,크기, 정렬 등등) 로 하려면
* httpd.conf에서 주석해제
Include conf/extra/httpd-autoindex.conf
기타 설정한게 많았지만, 나머지는 나중에 추가포스팅함.
SSL 보안접속 설정
1. Apache2.2/bin위치에서 cmd.
2. 입력
bin> openssl req -config ../conf/openssl.cnf -new -out test.csr -keyout test.pem
입력하면 아래처럼 패스워드와 인증서정보를 요구한다.
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
.....................................................++++++
...........................................++++++
writing new private key to 'foo.pem'
Enter PEM pass phrase: PASSWORD입력
Verifying - Enter PEM pass phrase: PASSWORD다시입력
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:KO
State or Province Name (full name) [Some-State]:SEOUL
Locality Name (eg, city) []:SEOUL
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Luuaz
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:서버도메인(일치하지않으면 경고)
Email Address []:관리자이메일
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 공백으로남겨둠
An optional company name []:공백으로남겨둠
3. 입력
bin> openssl rsa -in test.pem -out test.key
~~~~~~ 암호입력
4. 입력
bin> openssl x509 -in test.csr -out test.crt -req -signkey test.key -days 3650(유효기간은 마음대로~)
5. bin 디렉토리 아래에
test.crt, test.csr, test.key, test.pem 파일이 생성된다
실제 필요한것은 test.crt와 test.key이다.
추후에 더 인증을 할필요가 없으면
다른두개(test.csr, test.pem)은 지워도 된다.
필요한 인증서는 conf에 위치로 복사한다.
6. httpd.conf에서 주석제거
LoadModule ssl_module modules/mod_ssl.so
.....
Include conf/extra/httpd-ssl.conf
.....
7. conf/extra/httpd-ssl.conf 편집
# 포트변경
Listen 8823
.....
# 인증서경로 설정
SSLCertificateFile "C:/Apache2.2/conf/luuaz.crt"
SSLCertificateKeyFile "C:/Apache2.2/conf/luuaz.key"
8. Apache2 재시작.
참고사항.
* 예제설정에서 HTTP는 8822, HTTPS는 8823포트로 설정을 하였는데
HTTP포트로 접속시 강제로 HTTPS포트로 변경하려면
httpd.conf에 아래 설정을 입력한다.
(또다른 설정도 있는데 테스트도안해보고 귀찮아서 패스~)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule .* https://%{SERVER_NAME}:8823%{REQUEST_URI} [R,L]
</IfModule>
끝.