Apache( 멀티도메인 ) SSL 인증서신규설치가이드. [ 고객센터 ] 한국기업보안. 유서트기술팀 02-512-9375
1. 발급받으신인증서를해당 SSL 폴더에업로드또는저장합니다. Apache source 및 package 구분아파치경로확인명령어 : ps ef grep httpd -source: /usr/local/apache [ 경로및 apache이름은상이할수있음 ] -> 확인경로에설정파일존재 -package: /usr/sbin/apache [apache이름은상이할수있음 ] -> /etc/httpd 경로에설정파일존재 설명 : [$httpd_home] = Apache 디렉토리 [root@localhost httpd]# mkdir conf.d/ssl [root@localhost httpd]# cp mdc.ucert.co.kr.* conf.d/ssl [root@localhost httpd]# ls -la conf.d/ssl -rw-r--r--. 1 root root 1931 Jan 1 00:00 mdc.ucert.co.kr.ca-bundle -rw-r--r--. 1 root root 1744 Jan 1 00:00 mdc.ucert.co.kr.crt -rw-r--r--. 1 root root 1931 Jan 1 00:00 mdc.ucert.co.kr.key -rw-r--r--. 1 root root 1931 Jan 1 00:00 mdc.ucert.co.kr.root-bundle -rw-r--r--. 1 root root 1744 Jan 1 00:00 비밀번호.txt 2. [$httpd_home]/modules 디렉토리를확인하여 ssl 모듈확인. 동적설치확인. [root@localhost httpd_home]# ls modules mod_authn_anon.so mod_authz_owner.so mod_deflate.so mod_ssl.so mod_authn_dbd.so mod_authz_user.so mod_dir.so mod_speling.so mod_authn_dbm.so mod_autoindex.so mod_disk_cache.so mod_ssl.so mod_authn_default.so mod_cache.so mod_dnssd.so mod_status.so 정적설치확인. [root@localhost httpd_home]# httpd l Compiled in modules: core.c prefork.c http_core.c mod_so.c mod_ssl.c 3. ssl.conf 파일수정. 3 개의도메인을하나의인증서로적용하였습니다. ( 필요한문구만을출력하여 나타내었습니다.) [root@localhost httpd]# vi conf.d/ssl.conf
LoadModule ssl_module modules/mod_ssl.so * 설명 : ssl 모듈불러오는설정 Listen 443 * 설명 : 사용할 SSL 포트번호. 멀티인증서의경우동일한포트사용이가능. 싱글인증서의경우불가. * 설명 : 다른프로세스로사용중인포트에중복사용불가. #SSLPassPhraseDialog builtin SSLPassPhraseDialog exec:/etc/httpd/conf.d/pass.sh * 설명 : ssl 인증서비밀번호 shell script 위치및설정. 인증서비밀번호가없다면설정불필요. SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 SSLMutex default SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin ## ## SSL Virtual Host Context ## NameVirtualHost *:443 <VirtualHost *:443> * 설명 : 주로 * 자리에 IP 주소기입 * 설명 : www.ucert.co.kr SSL 설정 DocumentRoot "/var/www/html" * 설명 : 도메인홈디렉토리설정. ServerName www.ucert.co.kr:443 * 설명 : 도메인이름. ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on * 설명 : SSL 엔진사용. SSL 을사용토록한다.
SSLProtocol all -SSLv2 * 설명 : SSL 프로토콜설정. SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES SSLCertificateFile /etc/httpd/conf.d/ssl/www.ucert.co.kr.crt * 설명 : 인증서경로설정및파일명 SSLCertificateKeyFile /etc/httpd/conf.d/ssl/www.ucert.co.kr.key * 설명 : 개인키경로설정및파일명 SSLCertificateChainFile /etc/httpd/conf.d/ssl/www.ucert.co.kr.ca-bundle * 설명 : Chain 인증서경로설정및파일명 SSLCACertificateFile /etc/httpd/conf.d/ssl/www.ucert.co.kr.root-bundle * 설명 : Root 인증서경로설정및파일명 <Files ~ "\.(cgi shtml phtml php3?)$"> </Files> <Directory "/var/www/cgi-bin"> </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> <VirtualHost *:443> * 설명 : dev.ucert.co.kr SSL 설정 DocumentRoot "/var/dev/html" ServerName dev.ucert.co.kr:443 * 설명 : www 가아닌 dev 도메인이름을기입 ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log
LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES SSLCertificateFile /etc/httpd/conf.d/ssl/mdc.ucert.co.kr.crt SSLCertificateKeyFile /etc/httpd/conf.d/ssl/mdc.ucert.co.kr.key SSLCertificateChainFile /etc/httpd/conf.d/ssl/mdc.ucert.co.kr.ca-bundle SSLCACertificateFile /etc/httpd/conf.d/ssl/mdc.ucert.co.kr.root-bundle * 설명 : 인증서위치는 www.ucert.co.kr 도메인과동일한위치로지정토록한다. ( 원한다면다른위치의 파일사용가능.) <Files ~ "\.(cgi shtml phtml php3?)$"> </Files> <Directory "/var/www/cgi-bin"> </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> <VirtualHost *:443> * 설명 : aka.ucert.co.kr SSL 설정 DocumentRoot "/var/aka/html" ServerName aka.ucert.co.kr:443 * 설명 : www 가아닌 aka 도메인이름을기입 ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES SSLCertificateFile /etc/httpd/conf.d/ssl/mdc.ucert.co.kr.crt SSLCertificateKeyFile /etc/httpd/conf.d/ssl/mdc.ucert.co.kr.key SSLCertificateChainFile /etc/httpd/conf.d/ssl/mdc.ucert.co.kr.ca-bundle SSLCACertificateFile /etc/httpd/conf.d/ssl/mdc.ucert.co.kr.root-bundle * 설명 : 인증서위치는 www.ucert.co.kr 도메인과동일한위치로지정토록한다. ( 원한다면다른위치의 파일사용가능.) <Files ~ "\.(cgi shtml phtml php3?)$"> </Files> <Directory "/var/www/cgi-bin"> </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
4. 기존인증서파일명이 PEM 으로되어있을경우. 1. 아래와같이 2 가지형식으로있을경우. SSLCertificateFile /etc/httpd/conf.d/ssl/newreq.pem * 설명 : 인증서경로설정및파일명 SSLCertificateKeyFile /etc/httpd/conf.d/ssl/newreq.pem * 설명 : 개인키경로설정및파일명 SSLCertificateChainFile /etc/httpd/conf.d/ssl/chain.pem * 설명 : Chain 인증서경로설정및파일명 #SSLCACertificateFile /etc/httpd/conf.d/ssl/ca-bundle.crt * 설명 : Root 인증서경로설정및파일명 cat 명령어로도메인.key, 도메인.crt 파일을하나의파일에추가하여생성한다.( 순서중요!) cat www.ucert.co.kr.key > newreq.pem cat www.ucert.co.kr.crt >> newreq.pem cat 명령어로체인인증서, 루트인증서파일을하나의파일에추가하여생성한다. cat www.ucert.co.kr.ca-bundle > chain.pem cat www.ucert.co.kr.root-bundle >> chain.pem 2. 아래와같이 2 가지형식으로있을경우. SSLCertificateFile /etc/httpd/conf.d/ssl/www.ucert.co.kr.pem * 설명 : 인증서경로설정및파일명 SSLCertificateKeyFile /etc/httpd/conf.d/ssl/www.ucert.co.kr.key * 설명 : 개인키경로설정및파일명 #SSLCertificateChainFile /etc/httpd/conf.d/ssl/server-ca.crt * 설명 : Chain 인증서경로설정및파일명 #SSLCACertificateFile /etc/httpd/conf.d/ssl/ca-bundle.crt * 설명 : Root 인증서경로설정및파일명 cat명령어로도메인.crt, 체인인증서, 루트인증서파일을하나의파일에추가하여생성한다.( 순서중요!) cat www.ucert.co.kr.crt > www.ucert.co.kr.pem cat www.ucert.co.kr.ca-bundle >> www.ucert.co.kr.pem cat www.ucert.co.kr.root-bundle >> www.ucert.co.kr.pem 3. 아래와같이 1 가지형식으로있을경우. SSLCertificateFile /etc/httpd/conf.d/ssl/www.ucert.co.kr.pem * 설명 : 인증서경로설정및파일명 SSLCertificateKeyFile /etc/httpd/conf.d/ssl/www.ucert.co.kr.pem * 설명 : 개인키경로설정및파일명
#SSLCertificateChainFile /etc/httpd/conf.d/ssl/server-ca.crt * 설명 : Chain 인증서경로설정및파일명 #SSLCACertificateFile /etc/httpd/conf.d/ssl/ca-bundle.crt * 설명 : Root 인증서경로설정및파일명 cat명령어로도메인.key 도메인.crt, 체인인증서, 루트인증서파일을하나의파일에추가하여생성한다.( 순서중요!) cat www.ucert.co.kr.key > www.ucert.co.kr.pem cat www.ucert.co.kr.crt >> www.ucert.co.kr.pem cat www.ucert.co.kr.ca-bundle >> www.ucert.co.kr.pem cat www.ucert.co.kr.root-bundle >> www.ucert.co.kr.pem 5. KEY 파일비밀번호제거및추가하는방법. 비밀번호제거 [root@localhost httpd]# openssl rsa -in mdc.ucert.co.kr.key -out mdc.ucert.co.kr.key Enter pass phrase for www.ucert.co.kr.key: [ 비밀번호 ] writing RSA key * 명령어형식 : openssl rsa -in [ 제거할키파일명 ] -out [ 제거한키파일명 ] * 설명 : 위와같이쓰기문구가출력된다면비밀번호제거완료. 비밀번호추가 [root@localhost httpd]# openssl rsa -in mdc.ucert.co.kr.key -passout pass:'test1234' -out www.ucert.co.kr.key -des3 writing RSA key * 명령어형식 : openssl rsa -in [ 추가할키파일명 ] -passout pass:'[ 비밀번호 ]' -out [ 추가한키파일명 ] * 설명 : 위와같이쓰기문구가출력된다면비밀번호추가완료. 6. Shell Script 제작. Shell Script 가있으면재시작시비밀번호를입력할필요가없다. ( 인증서비밀번 호가없다면불필요함. [root@localhost httpd]# vi conf.d/pass.sh #!/bin/sh echo 패스워드 :wq [root@localhost httpd]# chmod a+x paas.sh * 설명 : root 만권한준다면 chmod 700
7. 아파치재시작진행. [root@localhost httpd]# /usr/sbin/httpd -t Syntax OK * 설명 : 설정문법에오류가있는지확인한다. 오류가있다면오류문구출력. 비밀번호가있는인증서라면재시작시비밀번호를입력. 비밀번호가제거혹은 Shell Script 사용시비밀번호입력불필요. [root@localhost httpd]# /usr/sbin/httpd k restart [ 혹은 ] service httpd restart * 설명 : 아파치재시작. [root@localhost httpd]# ps -ef grep httpd * 설명 : 아파치데몬확인진행 root 117031 1 0 Feb20 00:00:03 /usr/sbin/httpd daemon 117032 117031 0 Feb20 00:00:00 /usr/sbin/httpd daemon 117033 117031 0 Feb20 00:00:00 /usr/sbin/httpd daemon 117034 117031 0 Feb20 00:00:00 /usr/sbin/httpd daemon 117121 117031 0 Feb20 00:00:00 /usr/sbin/httpd root 118682 117620 0 01:22 pts/1 00:00:00 grep httpd [root@localhost httpd]# netstat -nlp grep httpd tcp 0 0 :::80 :::* LISTEN 118721/httpd tcp 0 0 :::443 :::* LISTEN 118721/httpd 8. 인증서설치를확인하도록합니다. [root@localhost ~]# echo "" openssl s_client -connect localhost:443 openssl x509 -noout -dates * 설명 : 위의명령어를입력하여인증서갱신날짜를확인하도록합니다. notbefore=jan 1 00:24:14 2016 GMT # 인증서시작일 notafter=dec 31 :38:20 2017 GMT # 인증서만료일 * 명령어형식 : echo "" openssl s_client -connect [ 도메인 or IP]:[ 포트번호 ] openssl x509 -noout - dates
9. 웹페이지에서의인증서확인방법 익스플로러확인방법 https://www.ucert.co.kr 접속예 도메인접속후에 Alt 키를누르고파일 속성 인증서클릭후인증서보기를선택하시면인증서정보를확인할수있습니다. 발급대상과유효기간이맞는지 확인합니다.