보안 서버(SSL) 구축하기 – apache 1.3

보안 서버(SSL) 구축하기- apache 1.3

쇼핑몰등의 사이트에서는 반드시 구축하도록 법제화가 되었다고 한다.
회원가입이나, 결재정보 입력등 개인 정보를 입력할때 암호화 되어 전송되도록 “https://도메인” 으로 접속할 수 있게 구축된 웹서버를 보안 서버라고 한다.

mysql, gd, imap등의 패키지는 이미 깔려 있는 상태이며, 모든 패키지는 /usr/local/src/ 디렉토리 안에 다운로드 받은 상태로 설치를 시작한다.

1. 소스를 다운 받은 디렉토리로 이동

[root@jook.pe.kr root]# cd /usr/local/src

2. 압축 풀기

[root@jook.pe.kr src]# tar xvzf apache_1.3.33.tar.gz
[root@jook.pe.kr src]# tar xvzf mod_ssl-2.8.22-1.3.33.tar.gz
[root@jook.pe.kr src]# tar xvzf php-4.3.10.tar.gz
[root@jook.pe.kr src]# tar xvzf ZendOptimizer-2.6.2-linux-glibc21-i386.tar.gz

3. mod_ssl configure

[root@jook.pe.kr src]# cd mod_ssl-2.8.22-1.3.33
[root@jook.pe.kr mod_ssl-2.8.22-1.3.33]# ./configure –with-apache=../apache_1.3.33

4. apache 설치

[root@jook.pe.kr mod_ssl-2.8.22-1.3.33]# cd /usr/local/src/apache_1.3.33
[root@jook.pe.kr apache_1.3.33]# SSL_BASE=/path-to-openssl (ex : SSL_BASE=/usr)
[root@jook.pe.kr apache_1.3.33]# ./configure –prefix=/usr/local/apache –enable-module=so –enable-shared=max –enable-module=ssl
[root@jook.pe.kr apache_1.3.33]# make
[root@jook.pe.kr apache_1.3.33]# make certificate

– make certificate 실행시 여러가지 정보를 물어보게 된다. 회사, 주소, 부서 이메일등 ssl 인증키 발급에 필요한 정보가 입력된 csr 코드를 생성하는데 필요한 정보들이기 때문에 정확한 정보를 입력한다. 마지막에 패스워드 설정 부분은 n 을 두번 입력.(y를 선택할경우 apachectl startssl 실행시 패스워드를 물어본다)

– make certificate 실행시 아무 정보를 입력하지 않고 엔터키만 입력한후 마지막의 패스워드 설정부분만 n 을 선택해서 설치를 진행해도 됨. 이 경우는 apache+mod_ssl+php 의 설치가 완료된 후 openssl 명령으로 csr 코드를 재생성 할 수 있다.

[root@jook.pe.kr apache_1.3.33]# make install

+——————————————————–+
| You now have successfully built and installed the      |
| Apache 1.3 HTTP server. To verify that Apache actually |
| works correctly you now should first check the         |
| (initially created or preserved) configuration files   |
|                                                        |
|   /usr/local/apache/conf/httpd.conf
|                                                        |
| and then you should be able to immediately fire up     |
| Apache the first time by running:                      |
|                                                        |
|   /usr/local/apache/bin/apachectl start
|                                                        |
| Or when you want to run it with SSL enabled use:       |
|                                                        |
|   /usr/local/apache/bin/apachectl startssl
|                                                        |
| Thanks for using Apache.       The Apache Group        |
|                                http://www.apache.org/  |
+——————————————————–+

– 위와 같이 출력되면 설치 완료. httpd.conf 파일을 수정한 후 apache 데몬 실행. 설치중에 패스워드 설정을 하였다면, 패스워드를 입력하고 데몬을 실행한다. ssl 서버로 시작하기 위해서 startssl 명령으로 시작.

[root@jook.pe.kr apache_1.3.33]# /usr/local/apache/bin/apachectl startssl

5. PHP 설치 (DB,imap,gd,apache)

[root@jook.pe.kr apache_1.3.33]# cd /usr/local/src/php-4.3.10
[root@jook.pe.kr php-4.3.10]# ./configure –prefix=/usr/local/php –with-mysql=/usr/local/mysql –with-apxs=/usr/local/apache/bin/apxs –enable-sysvshm=yes –enable-sysvsem=yes –enable-debug=no –enable-track-vars=yes –enable-url-fopen-wrapper=yes –with-ttf –with-png-dir=/usr –with-zlib-dir –with-jpeg-dir=/usr –with-gdbm=/usr –enable-ftp –with-tiff-dir=/usr –enable-memory-limit –enable-mbstring –with-expat-dir=/usr –enable-sockets –enable-wddx –with-freetype-dir=/usr –enable-bcmath –enable-mbstr-enc-trans –enable-mbregex –enable-exif –with-gd –enable-gd-native-ttf –enable-gd-imgstrttf –enable-calendar –with-openssl=/usr

– php configure시에 에러가 발생하는 경우는 서버에 필요한 패키지가 설치되어 있지 않기 때문이거나 필요한 패키지의 버전이 낮아서 발생하는 경우가 대부분이다. 어떤패키지를 체크하는 부분에서 에러가 발생하는지 확인 한 후 yum install 명령으로 필요한 패키지를 설치 한 후 다시 configure 하거나, 필요하지 않는 패키지일 경우 configure 옵션에서 삭제하고 configure를 다시 실행한다.
[root@jook.pe.kr php-4.3.10]# make
[root@jook.pe.kr php-4.3.10]# make install
[root@jook.pe.kr php-4.3.10]# cp php.ini-dist /usr/local/php/lib/php.ini

6. ZendOptimizer 설치

[root@jook.pe.kr php-4.3.10]# cd ZendOptimizer-2.6.2-linux-glibc21-i386
[root@jook.pe.kr ZendOptimizer-2.6.2-linux-glibc21-i386]# ./install.sh

– install.sh 파일을 실행한 후 apache와 php관련된 정보를 입력한 후 설치를 완료한다.

7. httpd.conf 파일 수정후 apache 리스타트

– httpd.conf 파일에 php가 인식되도록 아래 구문을 추가한다.

#################################################
AddType application/x-httpd-php .php .html .htm
AddType application/x-httpd-php-source .phps
#################################################

– httpd.conf 수정후 apache 데몬은 재실행한다. ssl 서버로 시작하기 위해서 startssl 명령으로 시작.

[root@jook.pe.kr ZendOptimizer-2.6.2-linux-glibc21-i386]# cd /usr/local/apache/conf
[root@jook.pe.kr conf]# /usr/local/apache/bin/apachectl stop
[root@jook.pe.kr conf]# /usr/local/apache/bin/apachectl startssl

8. key 파일 생성 및 csr 코드 생성

– apache+mod_ssl 설치하면서 make certificate를 실행할 때 여러 정보를 입력했을 경우는 /usr/local/apache/conf/ssl.key, /usr/local/apache/conf/ssl.csr 등의 디렉토리가 생성되어 key 파일과 csr 코드가 자동으로 생성된다. 생성된 csr 코드를 입력해서 ssl 인증키 발급업체에 인증키 발급을 신청 한다.

– 아래는 수동으로 key 파일과 csr 코드를 생성하는 방법이다.

[root@jook.pe.kr conf]# openssl genrsa 1024 > jook.pe.kr.key
warning, not much extra random data, consider using the -rand option
Generating RSA private key, 1024 bit long modulus
……………………………………..++++++
……++++++
e is 65537 (0x10001)
[root@jook.pe.kr conf]# openssl req -new -key jook.pe.kr.key -out jook.pe.kr.csr
Using configuration from /usr/local/ssl/openssl.cnf
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]:KR
State or Province Name (full name) [Some-State]:Gyunggido
Locality Name (eg, city) []:Sungnam
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Hostway IDC
Organizational Unit Name (eg, section) []:Technical support Team
Common Name (eg, YOUR name) []:www.jook.pe.kr
Email Address []:jook@jook.pe.kr

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
lsh813:/wwws/conf# cat jook.pe.kr.csr

=================================================================
—–BEGIN CERTIFICATE REQUEST—–
MIIB9DCCAV0CAAAQAwgbMxCzAJBgNVBAYTAktSMRIwEAYDVQQIEwlHeXVuZ2dpZG
EDAOBgNVB3AecTB1N1bmduYW0xFDASBgNVBAoTC0hvc3R3YXkgSURDMR8wHQYDVQ
ExZUZWNobmlF5Wwgc3VwcG9ydCBUZWFtMSEwHwYDVQQDExhsc2g4MTMuc2l0ZXBy
b3RlY3QuY28eua3IxJDAirBgkqhkiG9w0BCQEWFXN1cHBvcnREGG9zdHdheS5jby
cjCBnzANBgkqhkriG9w0dvBAQEFAAOBjQAr3r3wgYkCgYEA41OyN6Ni+Qq0U1XMl
jKn6uFiNq1Y4LRjaI7gzIkP3Vq9N3lYY2bnbpENHkOLg3YcqmBz8awPHtzm0LZi5
S87ZPFNILhNdfsYLnbC+RI+rCw0XTwvEoGKqtbCmluu6OG5f0pOS7fuuZIYapXEj
78z/j3uGgh8mgp06iysCAwEAAaAAMA0EF46GSIb3DQEBBAUAA4GBAMNZ3iOBXFUl
DC8tq/DXDx8g47FqiTKYoSU028uttM3mMlPAEIV91S2RmLxEpBkK2Alevh7Wf+zE
TIpbeJTVeF5d3CPDgqXOghHff0O/Wbdzz2YoLl3hu9d7sp8kkq2M2tSGAvSM03ke
bUB0Lru0Wiz/XsfdX4bFCTfpxiLPpbnW
—–END CERTIFICATE REQUEST—–
=================================================================

9. 인증서 및 CA 인증서 설치

– 인증키 발급 업체에서 인증키를 발급받으면 www_jook_pe_kr.crt(인증서), www_jook_pe_kr.ca-bundle(CA 인증서)와 같이 두개의 파일을 발급받게 된다.
– 두 파일을 서버의 /usr/local/apache/conf/ssl.crt 디렉토리에 업로드한다.

10. SSL 가상호스트 설정

– httpd.conf 파일에 아래와 같은 형식으로 가상호스트 설정 부분을 추가한다.

<IfDefine SSL>

NameVirtualHost 211.239.151.254:443

<VirtualHost 211.239.151.254:443>
DocumentRoot “/home/jook/public_html”
ServerName www.jook.pe.kr
ServerAdmin jook@jook.pe.kr
ErrorLog /usr/local/apache/logs/error_log
TransferLog /usr/local/apache/logs/access_log

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache/conf/ssl.crt/www_jook_pe_kr.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/jook.pe.kr.key
SSLCACertificateFile /usr/local/apache/conf/ssl.crt/www_jook_pe_kr.ca-bundle

<Files ~ “.(cgi|shtml|phtml|php3?)$”>
SSLOptions +StdEnvVars
</Files>
<Directory “/usr/local/apache/cgi-bin”>
SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent “.*MSIE.*”
nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0

CustomLog /usr/local/apache/logs/ssl_request_log
“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x “%r” %b”

</VirtualHost>

</IfDefine>

11. apache 데몬 리스타트

– 모든 설정이 완료된 후 apache 데몬을 리스타트 하고 https://도메인으로 사이트를 띄워서 인증키를 확인한다.
– 여기서 https://www.jook.pe.kr은 실제로는 ssl 설정이 되어 있지 않기 때문에 안뜨는게 정상 ^^

[root@jook.pe.kr conf]# /usr/local/apache/bin/apachectl stop
[root@jook.pe.kr conf]# /usr/local/apache/bin/apachectl startssl

– startssl로 데몬을 띄웠을때 정상적으로 동작하지 않으면 아래 사항을 확인한다.

* /usr/local/apache/logs 디렉토리 퍼미션 확인
* ssl_engine_log 확인
에러 스트링 확인 방법 : openssl errstr 0B080074  (0B080074는 ssl_engine_log에서 출력된 에러 스트링 코드)
* /usr/local/apache/conf/ssl.crt 디렉토리 퍼미션 확인
* /usr/local/apache/conf/ssl.key 디렉토리 퍼미션 확인