테스트 환경
System : Windows NT 5.1 build 2600
Apache Version 2.2.11 (Win32)
mod_ssl 2.2.11
OpenSSL 0.9.8i
PHP 5.2.9-1
※ Windows- XP에 Apache SSL 보안서버 적용 방법
Apache2에는 기본적으로 openssl이 포함되어 있습니다. 따라서 별도의 설치 없이 바로 인증서를 설치 하 실 수 있습니다.
openssl의 실행파일은 Apache2/bin에 있으며, openssl.cnf 파일은 Apache2/conf에 있습니다.
따라서 작업을 하시기 전에 openssl.cnf 파일을 bin파일로 복사를 해주시면 됩니다.
또한 openssl의 버젼과 apache 버젼과는 어느정도 상관관계가 있으므로 서로 호완이 되는 버젼을 가지고 작업을 해야 하는 것 같습니다.
따라서 위의 버젼이 아니라면 아래의 내용이 적용되지 않을 수 있습니다.
※ SSL (Secure Socket Layer)
어플리케이션 계층과 TCP 사이에 놓인 계층으로 전송 데이터를 암호화하는 프로토콜입니다. 웹 브라우저와 웹 서버 사이에 보안 접속 통신을 말하며 데이터가 암호화되어 전송됩니다. 암호화 방식은 공개키, 개인키 방식으로 암호화하며 한쪽은 암호화, 다른 한쪽은 복호화 과정을 거쳐 데이터를 전송합니다. SSL은 인증서(certificate) 방식으로 동작합니다. SSL을 적용해야 할 페이지는 로그인 페이지, 개인 정보 페이지, 쇼핑몰의 구매 페이지등 개인정보나 보안에 신경써야 할 부분에 적용해야 합니다.
준비
우선 apache2/bin 폴더에서 libeay32.dll 과 ssleay32.dll 파일을 /windows/system32로 복사를 해줍니다.
1. csr 파일을 생성
cmd 명령어를 이용하여 openssl이 설치된 폴더로 이동한 후 아래의 명령어를 입력합니다.
openssl req -config openssl.cnf -new -out server-scmlab.csr
...
Enter PEM pass pharse : [개인키 생성 비번]
...
CSR 은 다음과 같은 항목을 가지고 있습니다.
- 국가 (country) : KO
- 구/군 (state or province)
- 시/도 (locality or city)
- 회사명 (organization)
- 부서 (organizational unit)
- 도메인 주소 (common name)
위 명령어를 수행한 후 CSR에 필요한 항목을 모두 작성하면 server-scmlab.csr 파일과 privkey.pem 파일이 생성됩니다.
※ .csr 파일
CSR( Certificate Signing Request)의 약자로 서버를 운영하는 회사의 정보를 암호화하여 인증기관으로 보내 인증서를 발급받게 하는 일종의 신청서 파일입니다.
2. 개인키 생성
openssl rsa -in privkey.pem -out server-scmlab.key
...
Enter pass phrase for privkey.pem : [위에서 입력한 비밀번호]
writing RSA key.
위 명령어를 수행하면 server-scmlab.key 파일이 생성됩니다.
3. 인증서 생성
openssl x509 -in server-scmlab.csr -out server-scmlab.crt -req -signkey server-scmlab.key -days 365
위 명령어를 수행하면 server-scmlab.crt 파일이 생성됩니다.
이렇게 생성한 피일 중 server-scmlab.crt와 server-scmlab.key 파일을 {아파치 경로}/conf 디렉토리에 복사합니다.
이제 아파치 서버에는 인증서와 개인키가 있습니다. 이 키를 사용하여 아파치 서버가 SSL로 동작할 수 있게
아파치 서버의 httpd.conf 파일을 수정합니다.
4. htpd.conf 수정
4.1 httpd에 80 밑에 아래 443 추가
Listen 80
Listen 443
4.2 Directory 주석 처리
<Directory />
Options FollowSymLinks
AllowOverride None
#Order deny,allow
#Deny from all
</Directory>
주석 처리 해줍니다.
4.3 주석 해제
include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-userdir.conf
Include conf/extra/httpd-ssl.conf
의 주석은 해지 합니다.
5. httpd-ssl.conf 수정
apache2/conf/extra 폴더의 httpd-ssl.conf를 수정합니다.
아래와 같이작성을 하면 ssl을 적용하면, vhost를 사용하지 않아도 다중도메인에 일괄적으로 80과, 443을 사용 하실 수 있습니다.
즉 기존에는 두개의 도메인에 ssl을 적용하기 위해서는 442, 443 등 여러개의 포터를 이용해야 했으나 아래와 같이 적용을 하면
여러개의 도메인 모두 ssl 사용시 443 포터를 공용으로 이용 하실 수 있습니다.
------------------------------------------------
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
ServerAdmin webmaster@aaa.com
DocumentRoot /www/aaa
ServerName aaa.com
ServerAlias www.aaa.com
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@bbb.com
DocumentRoot /www/bbb
ServerName bbb.com
ServerAlias www.bbb.com
</VirtualHost>
.....
......
<VirtualHost *:443>
ServerAdmin webmaser@aaa.com
DocumentRoot /www/aaa
ServerName aaa.com
ErrorLog /apache2/logs/ssl-aaa-error_log
CustomLog /apache2/logs/ssl-aaa-access_log common
SSLEngine on
SSLCertificateFile /apache2/conf/server-aaa.crt
SSLCertificateKeyFile /apache2/conf/server-aaa.key
</VirtualHost>
위와 같이 적용을 한 후 apache2를 재 실행 합니다.
아파치를 다시 실행한 후 https://도메인명을 입력하시면 다음과 같은 메지시가 나옵니다.
이러한 에러를 해결하시려면......돈을 주고 신뢰기관으로 부터 인증을 받으시면 됩니다.;;;
단순히 테스트를 해보시고 싶으시면 설치를 해보시는 것도 좋을 듯합니다.
참고 사이트 :
1. http://blog.daum.net/question0921/765
2. http://junemp.tistory.com/entry/Apache-SSL-%EC%84%A4%EC%B9%98-2