[웹서버] 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

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

2 Responses

  1. 2022년 6월 18일

    3frequent

  2. 2023년 1월 27일

    1spiritual

페이스북/트위트/구글 계정으로 댓글 가능합니다.