[웹서버] apache 2.2 SSL 연동
보안 서버(SSL) 구축하기 – apache 2.2.4
아파치 2.x의 경우는 1.3과는 달리 mod_ssl을 별도로 추가해서 설치할 필요가 없다.
apache2.x 버전 자체에 모듈이 포함되어 있기 때문에 apache 설치시에 –enable-ssl 옵션만 추가해서 사용하면 된다.
mysql, gd, imap등의 패키지는 이미 깔려 있는 상태이며, 모든 패키지는 /usr/local/src/ 디렉토리 안에 다운로드 받은 상태로 설치를 시작한다.
1. 소스를 다운 받은 디렉토리로 이동
[root@jook.pe.kr root]# cd /usr/local/src
2. 압축 풀기
[root@jook.pe.kr src]# tar xvzf httpd-2.2.4.tar.gz
[root@jook.pe.kr src]# tar xvzfp php-5.2.3.tar.tar
[root@jook.pe.kr src]# tar xvzf ZendOptimizer-2.6.2-linux-glibc21-i386.tar.gz
3. apache 설치
[root@jook.pe.kr src]# cd httpd-2.2.4
[root@jook.pe.kr httpd-2.2.4]# ./configure –prefix=/usr/local/apache2 –enable-module=so –enable-shared=max –enable-rewrite –enable-ssl
[root@jook.pe.kr httpd-2.2.4]# make
[root@jook.pe.kr httpd-2.2.4]# make install
4. PHP 설치 (DB,imap,gd,apache)
– 아래의 옵션을 모두 적용하여 php를 설치 할 경우는 몇몇 패키지가 설치되어 있지 않아 에러가 발생하게 된다. php-5.2.3버전의 경우는 libxml2, libxml2-devel 패키지의 버전문제로 설치가 되지 않기 때문에 패키지 버전을 업그레이드 한다.(http://rpmfind.net 에서 OS에 맞는 최신 패키지를 찾아서 설치한다)
그리고, freetype, libjpeg, libpng등의 라이브러리와 관련된 에러메지시가 발견되면 freetype-devel, libjpeg-devel, libpng-devel 패키지를 추가로 설치하고 php설치를 진행한다.
[root@jook.pe.kr httpd-2.2.4]# cd /usr/local/src/php-5.2.3
[root@jook.pe.kr php-5.2.3]# ./configure –prefix=/usr/local/php –with-mysql=/usr/local/mysql –with-apxs2=/usr/local/apache2/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
[root@jook.pe.kr php-5.2.3]# make
[root@jook.pe.kr php-5.2.3]# make install
[root@jook.pe.kr php-5.2.3]# cp php.ini-dist /usr/local/php/lib/php.ini
5. ZendOptimizer 설치
[root@jook.pe.kr php-5.2.3]# cd /usr/local/src/ZendOptimizer-2.6.2-linux-glibc21-i386
[root@jook.pe.kr ZendOptimizer-2.6.2-linux-glibc21-i386]# sh install.sh
– install.sh 파일을 실행한 후 apache와 php관련된 정보를 입력한 후 설치를 완료한다.
6. 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/apache2/conf
[root@jook.pe.kr conf]# /usr/local/apache/bin/apachectl stop
[root@jook.pe.kr conf]# /usr/local/apache/bin/apachectl startssl
7. key 파일 생성 및 csr 코드 생성
– key 파일 생성
[root@jook.pe.kr conf]# openssl genrsa 1024 > jook.pe.kr.key
Generating RSA private key, 1024 bit long modulus
………………………………++++++
…………….++++++
e is 65537 (0x10001)
– csr 코드 생성
[root@jook.pe.kr conf]# openssl req -new -key jook.pe.kr.key -out jook.pe.kr.csr
Using configuration from /usr/share/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) [GB]:KR
State or Province Name (full name) [Berkshire]:Gyunggido
Locality Name (eg, city) [Newbury]:Sungnam
Organization Name (eg, company) [My Company Ltd]:Hostway IDC
Organizational Unit Name (eg, section) []:Technical support Team
Common Name (eg, your name or your server’s hostname) []: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 []:
– 생성된 csr 코드 확인
[root@jook.pe.kr conf]# cat jook.pe.kr.csr
—–BEGIN CERTIFICATE REQUEST—–
MIIB4jCCAUsCAQAwgaExCzAJBgNVBAYTAktSMRIwEAYDVQQIEwlHeXVuZ2dpZG8x
EDAOBgNVBAcTB1N1bmduYW0xFDASBgNVBAoTC0hvc3R3YXkgSURDMR8wHQYDVQQL
ExZUZWNobmljYWwgc3VwcG9ydCBUZWFtMRUwEwYDVQQDEwxKb28gd29vIGt3b24x
HjAcBgkqhkiG9w0BCQEWD2pvb2tAam9vay5wZS5rcjCBnzANBgkqhkiG9w0BAQEF
AAOBjQAwgYkCgYEA0ZvDHAVHU5xbT/ZDsAebNPBjRaXAPtmaV/WEIi4YsYkwBC15
Ro/gsPqNNCe5CJUw+K3qGnhbQI9Nd0/UKfTn174NSFWUxQv9E1mE4k5xoD/2T1Jf
TcZ0a0WDjIG/Xd69D+nkCTDG1ZbQnZ8qq2DcbulbjwD6sB5HTusRVHeIu2sCAwEA
AaAAMA0GCSqGSIb3DQEBBAUAA4GBAEjfawGIByqF+fLLjpeX2XZAIkL0L/kfOJbs
vuFwVNJuWYiakJF+LJaCz5S40CoZMV/bD+w+223MVF5KqAKTc6NUBbYGfBvuGTHT
TwLtnTqVBP0Xla0opWZWZ8JbGQJAGd+fxMOfvqx0ES1oPn0J97NpknSOBPOO3Q9s
/ZA9CUYd
—–END CERTIFICATE REQUEST—–
[root@jook.pe.kr conf]#
– csr 코드 생성이 완료되면 생성된 csr 코드를 입력해서 ssl 인증키 발급업체에 인증키 발급을 신청 한다.
8. 인증서 및 CA 인증서 설치
– 인증키 발급 업체에서 인증키를 발급받으면 www_jook_pe_kr.crt(인증서), www_jook_pe_kr.ca-bundle(CA 인증서)와 같이 두개의 인증서 파일을 발급받게 된다.
– 두 파일을 서버의 /usr/local/apache/conf 디렉토리에 업로드한다.
9. SSL 가상호스트 설정
– apache2는 httpd.conf 파일이외에 /usr/local/apache2/conf/extra/ 디렉토리에 있는 파일들을 include해서 참조하도록 설정되어 있다. 가상호스트 설정과, ssl 설정을 include 할수 있도록 httpd.conf 파일에서 아래부분의 주석을 해제 한다.
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
– httpd-vhosts.conf 파일에 가상호스트를 추가하고 httpd-ssl.conf 파일에 아래와 같은 형식으로 ssl 가상호스트를 추가한다.
##
## SSL Virtual Host Context
##
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/apache2/logs/error_log
TransferLog /usr/local/apache2/logs/access_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache2/conf/www_jook_pe_kr.crt
SSLCertificateKeyFile /usr/local/apache2/conf/jook.pe.kr.key
SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/www_jook_pe_kr.ca-bundle
<FilesMatch “\\.(cgi|shtml|phtml|php)$”>
SSLOptions +StdEnvVars
</FilesMatch>
<Directory “/usr/local/apache2/cgi-bin”>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch “.*MSIE.*” \\
nokeepalive ssl-unclean-shutdown \\
downgrade-1.0 force-response-1.0
CustomLog /usr/local/apache2/logs/ssl_request_log \\
“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\”%r\\” %b”
</VirtualHost>
10. 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 start
– apache2.x 에서는 apachectl startssl로 실행을 하지 않는다. httpd.conf 파일에서 httpd-ssl.conf 파일을 include하는 부분의 주석을 풀고 start 하게되면 자동으로 443포트까지 열리게 되며, ssl 서버가 가동되게 된다.
* csr 코드 확인 : openssl req -noout -text -in *.csr