Apache - Single

 

Need video services?

동영상 가이드
1. Apache 데몬(프로세스) 확인 방법
[root@localhost ~]# ps -ef | grep httpd
root 19403 1 0 05:01 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 19404 19403 0 05:01 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 19405 19403 0 05:01 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 19406 19403 0 05:01 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 19407 19403 0 05:01 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 19408 19403 0 05:01 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
root 19538 19479 0 05:56 pts/3 00:00:00 grep httpd
2. Apache 사용 포트 확인
[root@localhost ~]# netstat -nap | grep httpd
tcp 0 0 :::80 :::* LISTEN 19403/httpd
3. Apache&SSL 환경 설정

1) "vi" 명령어를 사용하여 Apache의 환경파일(httpd.conf)을 열기

RPM 아파치일 경우 주로 /etc/httpd/conf에 httpd.conf이 존재합니다.

[root@localhost ~]# cd /usr/local/apache2/conf/
[root@localhost conf]# ls
extra httpd.conf magic mime.types original
[root@localhost conf]# vi httpd.conf

2) Apache 설정 내용 확인

Listen 80

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
/ssl
설명 : ssl (단어) 검색

3) "mod_ssl.so" 모듈이 존재하는지 확인 (1.3.x 버전 아파치일 경우 libssl.so)

LoadModule usertrack_module modules/mod_usertrack.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule ssl_module modules/mod_ssl.so
설명 : "LoadModule ssl_module modules/mod_ssl.so"에 #(주석)이 있을 경우 주석 해제
# Distributed authoring and versioning (WebDAV)
#Include conf/extra/httpd-dav.conf

# Various default settings
#Include conf/extra/httpd-default.conf

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
설명 : "Include conf/extra/httpd-ssl.conf" 에 주석(#)이 있을 경우 주석 해제

#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
:wq!
설명 : 저장 후 종료

4) SSL 환경파일을 "vi" 명령어로 편집 합니다.

RPM 아파치일 경우 주로 /etc/httpd/conf.d에 ssl.conf 이 존재합니다

[root@localhost conf]# vi ./extra/httpd-ssl.conf

Listen 443
설명 : SSL 포로토콜 포트 선언 설정

SSLPassPhraseDialog builtin
설명 : 개인키 패스워드 수동 입력 설정

NameVirtualHost *:443
설명 : 가상호스트를 관리하기 위한 기본 지시어 선언

<VirtualHost *:443>
설명 : 호스트 해더 지정 ( 기본 설정 : _default_ )

# General setup for the virtual host
DocumentRoot "/usr/local/apache2/htdocs"
설명 : SSL을 설정 할 도메인의 DocumentRoot와 동기화
ServerName www.ucert.co.kr:443
설명 : SSL을 설정 할 도메인의 Domain과 동기화
ServerAdmin ucert@ucert.co.kr
ErrorLog /usr/local/apache2/logs/error_log
TransferLog /usr/local/apache2/logs/access_log

# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
Apache는 SSL파일의 확장자에 상관없이 파일 내용만 맞으면 정상적으로 구동됩니다.
SSLCertificateFile /usr/local/apache2/conf/ucert/www.ucert.co.kr.crt
설명 : 발급 받은 파일 중 "인증서 파일"을 지정
SSLCertificateKeyFile /usr/local/apache2/ucert/www.ucert.co.kr.key
설명 : 발급 받은 파일 중 "개인키 파일"을 지정
SSLCertificateChainFile /usr/local/apache2/conf/ucert/ChainBundle.crt
설명 : 발급 받은 파일 중 "Chain CA인증서 파일"을 지정
설명 : SSLCertificateChainFile 에 주석(#)이 있을 경우 주석 해제
SSLCACertificateFile /usr/local/apache2/conf/ucert/ROOT.crt
설명 : 발급 받은 파일 중 "ROOT CA인증서 파일"을 지정
설명 : SSLCACertificateFile 에 주석(#)이 있을 경우 주석 해제

<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>
:wq!
설명 : 저장 후 종료

  참고설명. 개인키 패스워드 자동 입력 설정

[root@localhost conf]# vi /usr/local/apache2/conf/ucert/pass.sh
설명 : 패스워드 출력 스크립트 작성 아래 2줄의 내용을 입력 합니다
#!/bin/sh
echo 패스워드
설명 : "패스워드"는 발급 받은 패스워드.txt 파일에 저장 되어 있습니다
:wq!
설명 : 저장 후 종료

[root@localhost conf]# chmod 700 /usr/local/apache2/conf/ucert/pass.sh
설명 : 실행 권한 설정

[root@localhost conf]# vi extra/httpd-ssl.conf
#SSLPassPhraseDialog builtin
설명 : 개인키 패스워드 수동 입력 설정을 주석처리
SSLPassPhraseDialog exec:/usr/local/apache2/conf/ucert/pass.sh
설명 : 개인키 패스워드 자동 입력 스크립트 실행 경로 명시

Windows환경의 Apahce웹서버를 사용하시는 경우에는 키 파일의 패스워드가 없어야 정상적으로 구동됩니다.
개인키 패스워드 제거 하기
[root@localhost ssl]# openssl rsa -in [키 파일] -out [새로운 키 파일명]
[패스워드 입력]

패스워드 제거 후 키 파일 내용
-----BEGIN RSA PRIVATE KEY-----
VIEaXhX+IZtFw25vfK.............
-----END RSA PRIVATE KEY-----
4. Apache TEST & 재시작
/usr/local/apache2/bin/apachectl configtest
Syntax OK
설명 : "Syntax OK" 정상 적으로 설정 되었을 경우 나오는 메시지

/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
설명 : 2.2.x 버전 ↑(이상)
/usr/local/apache2/bin/apachectl startssl
설명 : 2.0.x 버전 ↓(이하)
5. Apache 포트 및 만료일 확인
설명 : TCP 443포트 확인
[root@localhost ~]# netstat -nap | grep httpd
tcp 0 0 :::80 :::* LISTEN 19301/httpd
tcp 0 0 :::443 :::* LISTEN 19301/httpd

설명 :443포트 Listen 된 상태에서 아래의 명령어를 사용하여 로컬에서 인증서를 확인 합니다
명령어 형식 : openssl s_client -connect [도메인명, 혹은 서버IP]:[SSL 포트] | openssl x509


[root@localhost ~]# openssl s_client -connect 127.0.0.1:443 | openssl x509
depth=1 /C=BE/O=GlobalSign nv-sa/CN=GlobalSign Extended Validation CA - SHA256 - G2
verify error:num=20:unable to get local issuer certificate
verify return:0
-----BEGIN CERTIFICATE-----
MIIE2jCCA8KgAwIBAgICD/cwDQYJKoZIhvcNAQEFBQAwPDELMAkGA1UEBhMCVVMx
FzAVBgNVBAoTDkdlb1RydXN0LCBJbmMuMRQwEgYDVQQDEwtSYXBpZFNTTCBDQTAe
Fw0xMDEyMTQxMDQ4NTlaFw0xMjAyMTUyMTM4MjBaMIHlMSkwJwYDVQQFEyBrdW9u
SXgyYmI0a0lxZGpvWWE1bklYQWRxNVl6dG9RUDELMAkGA1UEBhMCS1IxGDAWBgNV
BAoTD3d3dy51Y2VydC5jby5rcjETMBEGA1UECxMKR1Q1NDc2OTQxMDExMC8GA1UE
CxMoU2VlIHd3dy5yYXBpZHNzbC5jb20vcmVzb3VyY2VzL2NwcyAoYykxMDEvMC0G
A1UECxMmRG9tYWluIENvbnRyb2wgVmFsaWRhdGVkIC0gUmFwaWRTU0woUikxGDAW
BgNVBAMTD3d3dy51Y2VydC5jby5rcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAMl6qA1dEc/FKw2qSjlh0iZDVGp+zqjBXW/iwkcnEZCzy/wxauh85OwM
G4TZ2FhJQabssuyVocWJGE/Fq3sO6U6lYZwycUKWN45sZTLGhdCbC0ZSb0OUq7tx
A8pDSqH/2/kG8a/Yfn8zGmXgsWi5swgfPKIa7dcmnmglA1x4YDquo0npWMizgt2z
mqQcuY5S/QKCDZo5Ee1BXaS4D7ZHiXzw5W9sDtsqo1nO37gLHTpNhIQrYnzN4ay7
l0FHLxiwEi2O/gndd4Z4/Rr0loFTdemStSPQlIRTag/+8/tMo+BoxHmPFTuWyNAb
MShN1eti+c0qWGsHigjvXMWtyg0NT4UCAwEAAaOCATowggE2MB8GA1UdIwQYMBaA
FGtpPWoYQkrdjwJlOf01JIZ4kRYwMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU
BggrBgEFBQcDAQYIKwYBBQUHAwIwJwYDVR0RBCAwHoIPd3d3LnVjZXJ0LmNvLmty
ggt1Y2VydC5jby5rcjBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vcmFwaWRzc2wt
Y3JsLmdlb3RydXN0LmNvbS9jcmxzL3JhcGlkc3NsLmNybDAdBgNVHQ4EFgQUkHru
EM3YsHLS8SjMWr7kBkyKu/YwDAYDVR0TAQH/BAIwADBJBggrBgEFBQcBAQQ9MDsw
OQYIKwYBBQUHMAKGLWh0dHA6Ly9yYXBpZHNzbC1haWEuZ2VvdHJ1c3QuY29tL3Jh
cGlkc3NsLmNydDANBgkqhkiG9w0BAQUFAAOCAQEAcjR0KR5MnA8gJFhZ4GRHSfvD
N2WX88pZPtE0BlEOU18HLLg8xL5Bb8exvX5+sExHS9zasRHUIPAYpwALSf4/WP7M
96ZMAEAggR9Dt8pCyFO7QXgkB3QQ7EsEK+s01wSWxMN5/ZcSV7O0k/DF83DH118x
/DFVeGNJsbwC0BEzVe/HnmBo77dxCdG+M16R59s2BjEr9Lq9sNnnE3drqs51qrs+
T0CyUWSpZ9KhlwjcLCMKe/SY8WIXIYaAx+IqJ7XJQU+GV1AJP3zHldhngL7eMMFo
ROpAHbjfkI0XboRtTAVs0K46omCAA4JViVF1DDKaXPZ+swif4GlzY/ijwPLDkA==
-----END CERTIFICATE-----

설명 : 인증서 시작과 만료일 확인
[root@mail ~]# echo "" | openssl s_client -connect localhost:443 | openssl x509 -noout -dates
notBefore=Jun 30 11:16:09 2016 GMT      인증서 시작일
notAfter=Sep 12 10:58:54 2017 GMT       인증서 만료일

설명 : 만료일만 확인
[root@mail ~]# openssl s_client -connect localhost:443 < /dev/null 2>&1 | openssl x509 -noout -enddate
notAfter=Sep 12 10:58:54 2017 GMT

설명 : 로컬에서 인증서 출력이 정상적이고 외부에서 https://[도메인]으로 브라우저 접속 시 통신이 되지 않을 경우 내부 방화벽(예. iptables), 외부 방화벽, 웹방화벽 등에 해당 SSL포트가 Allow 되어있는지 확인하고, 또는 웹방화벽에 인증서가 설치가 되어야 하는지 확인하시고 필요하시면 웹방화벽에도 인증서를 설치합니다