Apache에 SSL 을 적용하게 되면 대개 www.m-sys.co.kr 이나 회원 로그인 할때만 사용을 하는데 고객의 요청으로 서브 도메인까지 SSL 적용을 해야하는 경우가 있어서 제가 사용한 방법을 글로 남깁니다.
Apache 2.0.x 이하 버젼의 경우를 먼저 하도록 하겠습니다.
일단 ssl.conf 이 파일을 찾는게 중요합니다. 대부분의 설정을 여기서 하기 때문이죠
# cd /usr/local/apache/conf <- 대부분 여기에 위치해요~
아차~ 제일 중요한 vhost.conf 에 있는 내용을 ssl.conf 로 넣어야 하니 이 작업을 먼저 하겠습니다.
# cat vhost.conf >> ssl.conf <- 이렇게 하면 vhost.conf 의 내용이 ssl.conf 제일 밑 부분으로 연결되어 추가 됩니다.
그다음 vi 를 이용하여 수정~~
# vi ssl.conf
<IfDefine SSL> <- cat 을 이용하여 vhost.conf 내용을 그냥 가져왔으니 여기와 끝을 잘 보시고 수정하셔야합니다. 맨 끝에는 </IfDefine> 이게 있어야겠죠?
.
.
.
Listen 443 NameVirtualHost 218.*.*.213:443 <- 대충 여기에 해당 서버 IP랑 Port 443 을 추가합니다.
그리고
SSLPassPhraseDialog builtin <- 수정을 하거나 주석(#) 처리해서 Server Reboot 시 패스워드를 자동으로 기입하도록 해야합니다. 아참 이부분은 Apache 시작시 패스워드를 묻지 않도록 인증서를 만들었으면 패스~~~~~~하셔도 됩니다.
요렇게... ^^
#SSLPassPhraseDialog builtin SSLPassPhraseDialog exec:/usr/local/apache/conf/ssl/startssl_pw.sh <- 이부분은 저의 블로그에 보면 Apache 에서 자동 패스워드 적용이라는 타이틀로 되어 있는걸 참고 하시길 바랍니다.
이제 Apache2.0.x 이상 버젼을 하도록 하겠습니다.
뭐~ 위에 꺼와 틀린점은 ssl.conf 파일 이름과 디렉토리 위치가 틀리다는거 빼고는 다 똑같습니다.
# cd /usr/local/apache/conf/extra <- 대부분 여기에 위치해요~
아차~ 제일 중요한 httpd-vhosts.conf 에 있는 내용을 httpd-ssl.conf 로 넣어야 하니 이 작업을 먼저 하겠습니다.
# cat httpd-vhosts.conf >> httpd-ssl.conf <- 이렇게 하면 httpd-vhosts.conf 의 내용이 httpd-ssl.conf 제일 밑 부분으로 연결되어 추가 됩니다.
그다음 vi 를 이용하여 수정~~
# vi httpd-ssl.conf
<IfDefine SSL> <- cat 을 이용하여 httpd-vhosts.conf 내용을 그냥 가져왔으니 여기와 끝을 잘 보시고 수정하셔야합니다. 맨 끝에는 </IfDefine> 이게 있어야겠죠?
.
.
.
Listen 443 NameVirtualHost 218.*.*.213:443 <- 대충 여기에 해당 서버 IP랑 Port 443 을 추가합니다.
그리고
SSLPassPhraseDialog builtin <- 수정을 하거나 주석(#) 처리해서 Server Reboot 시 패스워드를 자동으로 기입하도록 해야합니다. 아참 이부분은 Apache 시작시 패스워드를 묻지 않도록 인증서를 만들었으면 패스~~~~~~하셔도 됩니다.
요렇게... ^^
#SSLPassPhraseDialog builtin SSLPassPhraseDialog
exec:/usr/local/apache/conf/ssl/startssl_pw.sh <- 이부분은 저의 블로그에
보면 Apache 에서 자동 패스워드 적용이라는 타이틀로 되어 있는걸 참고 하시길 바랍니다.
Linux 에서 Apache2.0.47을 SSL 적용하여 설치를 해보니 실행시(startssl) 마다 패스워드를 넣어줘야만
실행이 되더군요. 이렇게 되니 Server 가 Reboot 될때 startssl로 자동실행하게 되면 패스워드 부분에서 걸려 apache가 실행이 되지 않으니 참고 하시길 바랍니다. 이 부분을 해결 하는 방법을 맨 밑에 제가 적어 놓도록 하겠습니다.
애초에 패스워드를 묻지 않도록 인증서를 만들면 될텐데... 일을 만들고 있네요 ㅠ.ㅠ 뭐 이것도 경험이니...... -_-;
일단 인증서가 있는 디렉토리로 이동하세요~ (예, /usr/local/apaceh/conf/ssl)
뭐 이부분은 그냥 패스워드를 넣을 파일을 만드는 작업이라 아무곳에 하셔도 되지만 인증서가 있는곳에 하시면 더 좋겠죠? 응? 퍽~~~
일단 디렉토리로 이동하셨다면 밑에 적을것 처럼 하시면 됩니다.
# cat > startssl_pw.sh #!/bin/sh echo 패스워드 Ctrl + C <- 이 부분은 키보드에서 눌리는거에요. 혹시 이대로 적으시면 안되요~~
#
그다음은 이 파일이 사용할 수 있도록 권한을 설정하겠습니다. # chmod 755 startssl_pw.sh
이제 한 고비는 넘겼네요. ㅎㅎ
이제 httpd.conf 혹은 ssl.conf 가 있는 곳으로 이동~~~~~~ (예, /usr/local/apache/conf)
둘중에 아무곳이나 마음에 드시는곳에 수정하시면 됩니다.
난 일단 httpd.conf 이쪽으로,,
# vi httpd.conf
그다음 밑의 부분을 찾으세요~~
<IfModule mod_ssl.c> SSLPassPhraseDialog exec:/usr/local/apache/conf/ssl/startssl_pw.sh <- 여기에 추가 하시면 됩니다. </IfModule mod_ssl.c>
아참 ssl.conf 에서는 밑의 부분을 찾아서 주석(#) 처리를 하셔서 추가 하시거나 builtin 을 exec:/usr/local/apache/conf/ssl/startssl_pw.sh 로 수정해 주시면 됩니다.
# vi ssl.conf
SSLPassPhraseDialog builtin-> #SSLPassPhraseDialog builtin 주석처리하고 밑의 부분을 추가 혹은
SSLPassPhraseDialog exec:/usr/local/apache/conf/ssl/startssl_pw.sh <- 이렇게 수정
이렇게 하시고 apache 를 실행해 보시면 패스워드를 묻지 않고 그냥 스스륵~~~ 실행이 됩니다.
이젠 Server Reboot 시 자동실행이 되도록 수정을 하도록 하겠습니다.
# vi /etc/rc.d/rc.local
/usr/local/apache/bin/apachectl startssl
이렇게 적어 주시면 Server Reboot 하더라도 자동으로 apache가 실행이 됩니다.
위의 파일들은 모두 패키지 형식이기 때문에 gzip으로
압축만 풀고 간단한 명령어가 치면 자동으로
설치 됩니다.
예) # gzip -d
gcc-3.4.6-sol26-sparc-local.gz
이렇게 모두 압축을 풀어주세요
압축을 풀게 되면 gcc-3.4.6-sol26-sparc-local 이렇게만 남습니다.
그다음 패키지를 풀면됩니다.
예) # pkgadd -d
gcc-3.4.6-sol26-sparc-local
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: all
이렇게 모두 파일이름만 바꾸고 설치 하시면 됩니다.
2. PATH 설정
밑의 내용을 /etc/profile 에서 넣어주시면 됩니다.
# vi /etc/profile
# for Apache located at /usr/local/apache2
if [ -d /usr/local/apache2 ]
then
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apache2/lib; export
LD_LIBRARY_PATH
PATH=$PATH:/usr/local/apache2/bin; export PATH;
fi
# for MySQL located at /usr/local/mysql
if [ -d /usr/local/mysql/lib/mysql ]
then
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib/mysql; export
LD_LIBRARY_PATH
PATH=$PATH:/usr/local/mysql/bin; export PATH;
fi
ServerName 192.168.1.69:80 IP 대신 도메인을 사용할 수 있음.
test를 위해서는 일단 ip로 해도 괜찮아요.
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-multilang-errordoc.conf
Include conf/extra/httpd-autoindex.conf
Include conf/extra/httpd-languages.conf
Include conf/extra/httpd-userdir.conf
Include conf/extra/httpd-info.conf
Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-manual.conf
Include conf/extra/httpd-dav.conf
Include conf/extra/httpd-default.conf
Include conf/extra/httpd-ssl.conf 위의 사항들을 사용하고 싶다면 # 주석을 없애면 됩니다.
# /usr/local/apache2/bin/apachectl start
혹시 에러가 생기다면 필요한 라이브러리를 설치하지 않아 생겼을 테니 꼭 라이브러리를 설치하시길 바랍니다.
부팅시 자동으로 Apache를 구동할 수 있도록 스크립을 작성하겠습니다. 위의 사항들을 제대로 구성하셨으면
/etc/init.d/apache 라는 파일이 만들어져 있을껍니다. 이건 그냥 무시하시고 저는 간단하게 하기 위해 짧게 할 예정이라 한줄 밖에 안됩니다.
#vi /etc/init.d/apache2
#!/sbin/sh
#
# apache starting script
#
/usr/local/apache2/bin/apachectl start
더 이상 없습니다.
# chown root:sys /etc/init.d/apache2 소유자와 그룹을 root : sys로 변경
# vi
/usr/local/apache2/htdocs/index.php
<?
phpinfo()
?>
확인방법은 http://192.168.1.69/index.php (이건
저의 셋팅에 따라 만든거에요) 제대로 되었다면 밑의 그림이 나올껍니다. 아~ 그리고
이 테스트는 APM 모두 설치 셋팅한다음 테스트를 하시길 바랍니다.
3) MySQL
# useradd -d /export/home/mysql -g staff -m -u 102 -s /bin/false mysql MySQL을 사용할 계정을 추가
# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
# vi /etc/my.cnf /usr/local/mysql/share/mysql 에 my-huge.cnf, my-large.cnf, my-medium.cnf, my-small.cnf 의 예제 설정
파일이 있다. 이를 /etc/my.cnf 으로 이름을 바꿔
복사하면 된다.
skip-networking
#log-bin 리플리케이션을 사용하지 않는다면 [log-bin]을 찾아
주석처리하고 외부에서 접속이 없다면 [skip-networking]의 주석을 푼다.
# /usr/local/mysql/bin/mysql_install_db 기본 MySQL DB를 생성
# chown -R mysql:staff /usr/local/mysql/var 기본 MySQL DB가 생성되는 /usr/local/mysql/var 의 디렉토리 및 파일들의 소유자를 mysql 그룹은 staff로 변경
# /usr/local/mysql/share/mysql/mysql.server start MySQL 서버를 시작 종료는 /usr/local/mysql/share/mysql/mysql.server stop
# /usr/local/mysql/bin/mysqladmin -u root password 'PASSWORD' MySQL의 root 패스워드를
변경 기본값은 없기 때문에 보안을 위해서 반드시 수정
# /usr/local/mysql/bin/mysqladmin -u root -h test -p password 'NEW-PASSWORD'
Enter password: PASSWORD 위처럼 하시면 새로운 패스워드로 변경이 됩니다. 위에서 test는 host 이름입니다.
부팅시 자동으로 Mysql를
구동할 수 있도록 스크립을 작성하겠습니다.
# vi /etc/init.d/mysql
#!/sbin/sh
#
# mysql starting script
#
/usr/local/mysql/bin/mysqld_safe &
# chown root:sys /etc/init.d/mysql 소유자와 그룹을 root : sys로 변경
# chmod 744 /etc/init.d/mysql 파일 권한은 744로
# ln /etc/init.d/mysql /etc/rc2.d/S99mysql
이렇게 하면 mysql도 부팅시 자동으로 데몬이 올라오게 됩니다.
4. 보안서버(SSL) 설치 및 설정
1) openssl 을 이용하여 key 파일 생성 및 csr
코드 생성
일단 ssle 인증서 키와 파일들을 저장할 디렉토리를 만들어놓습니다.
# mkdir /usr/local/apache2/conf/ssl
# cd /usr/local/apache2/conf/ssl
Ps. 꼭 개인키와 csr 코드 등은 복사등을 해서 백업을 해주시길 바랍니다.
- 개인Key 파일 생성
# openssl genrsa -des3 1024 > m-sys_co_kr.key
Generating RSA private key, 1024 bit long modulus
.................................++++++
...............++++++
e is 65537 (0x10001)
Enter pass phrase:<-
암호 필히 기억 (apache 실행시 사용함)
Verifying - Enter pass phrase:
만약 apache 실행시 암호를 사용하지 않고 사용하실려면 아래의 명령어를 통해 개인키를 생성하시길 바랍니다.
이렇게 정상적인 OK 가 나오면 실행하시면 됩니다. 간혹 인증서 때문에 테스트에서는
정상 작동이 된다고 하지만 실행해보면 실패가 되는 경우가 있는데 운영중인 서버라면 httpd.conf 에서
Include conf/extra/httpd-ssl.conf부분을 주석처리하고 일단 상황을 보시고 실행하시길 바랍니다.
그리고 Solaris에서는 모르겠지만 Linux 에서는 apache 2.x.x 버전은 openssl, 이 자체 내장되어서 나옵니다. 전 sunfreeware 사이트에서 설치시 받아야할 항목을 모두
받아서 설치한거니 헷갈리지 마세요 ^^; 아참 apache 1.3.x 버전의 경우 apache 실행시 apachectl startssl 을 해야 하지만 apache 2.x.x 의
경우 밑의 명령어 처럼 start 명령어만 해주면 됩니다.
# ./apachectl start
Apache/2.2.12 mod_ssl/2.2.12 (Pass Phrase Dialog)
Some of your private key files are encrypted for security
reasons.
In order to read them you have to provide the pass phrases.
Server www.m-sys.co.kr:443 (RSA)
Enter pass phrase:
OK: Pass Phrase Dialog successful.
이렇게 하고 443 Port가 사용하고 있는지 확인하세요.
# netstat –an | grep 443
*.443*.*00 245760 LISTEN
*.443*.*00 245760 LISTEN
443 Port 가 열려있다면 이제 익스플로러나 파폭등을 이용해서 https://m-sys.co.kr주소로 들어가시면 SSL 보안이 실행되고 있는지 확인하실 수가 있습니다.