http://egloos.zum.com/guswl47/v/6514311


SSL 이란 Secure Socket Layer 의 약자로 인터넷 상에서 정보를 암호화하여 송수신하는 프로토콜로 
현재 인터넷에서 널리 쓰여지고 있는 HTTP나 FTP 등의 데이터를 암호화하여 기업 비밀이나 개인 정보 등을 안전하게 송수신할 수 있다



SSL 특징
공개키 암호나 비밀키 암호, 디지털 증명서, 해쉬함수 등의 보안 기술을 조합하여 데이터 도청이나 변경, 위장을 방지할 수 있으며 OSI 4,5 계층의 경계에서 동작하여 HTTP나 FTP 등 상위 프로토콜을 이용하는 S/W 에서는 특별히 의식하지 않고도 이용할 수 있다



구축 방법

1. 필요한 패키지 설치

SSL 암호화를 위해서는 openssl 과 mod_ssl 이 필요한데 6.4 버전 이후로는 openssl이 자동 설치되어있으므로
yum -y install mod_ssl 명령어를 사용하여 mod_ssl 만 마저 설치해주면 된다
(openssl 이 설치 되어있는지 확인하기 위해서는  yum list installed openssl 명령어를 사용하면 된다)

2. self-signed certificate 생성

SSC 란 인증서를 만들고 개인키로 직접 인증서에 서명하는 것으로
openssl 을 이용해 self-signed certificate 를 생성한다
(원래는 이러한 인증서는 사서 사용해야 하지만 개인 웹 사이트라면 self-signed certificate 로도 가능하다)
 
<openssl 을 이용한 인증서 생성 과정>

2-1. 개인 키 생성

#openssl genrsa -out ca.key 1024

2-2. CSR (Certificate Signing Request) 생성 -> CSR 은 인증서 서명 요청을 의미
             쉽게 말해 인증서 발급 받기 위해 '나는 누구이고 키 값은 이 값이다' 하는 사용 정보를 저장하고 있다

#openssl req -new -key ca.key -out ca.csr


※ 사용자명 혹은 서버 호스트명은 뒤에서 쓰이니 자기가 지정한 이름 명을 알아둬야한다

2-3. self signed key 생성


#openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt


3. 다음 위치에 파일들을 복사


#cp ca.crt /etc/pki/tls/certs

#cp ca.key /etc/pki/tls/private/ca.key

#cp ca.csr /etc/pki/tls/private/ca.csr


다음과 같은 위치로 파일들을 복사해주는 이유는 해당 디렉터리에 위치해야만 SSL 서비스를 제대로 제공해줄 수 있기 때문이다


4. SELinux에 의해 Certificate file 들이 삭제 될 수 있으므로 삭제됐을 시에는

   다음과 같은 명령어를 사용하여 삭제 된 구문을 복구 시킬 수 있다


#restorecon -RvF /etc/pki

/etc/pki/* 하위의 모든 폴더나 파일에서 삭제된 구문을 복원한다


5. 아파치 ssl 설정을 변경하기 위한 수정


# vi /etc/httpd/conf.d/ssl.conf



위의 두 구문을 

SSLCertificateFile /etc/pki/tls/certs/ca.crt

SSLCertificateKeyFile /etc/pki/tls/private/ca.key 로 고쳐준다

그리고 서비스에 적용시키기 위해 재시작해준다

#service httpd restart

6. 모든 설정이 끝난 뒤 SSL 은 암호화 위해 443번 포트를 사용하기 때문에 이를 위해서 virtualhost 를 추가한다

#vi /etc/httpd/conf/httpd.conf 
파일을 연 뒤 맨 마지막에 아래와 같은 구문을 추가 해준다

NameVirtualHost *:443


<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ca.crt
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key
    ServerAdmin hello.co.kr              -> 2-2 번에서 설정해준 사용자명 혹은 서버 호스트명은 이곳에 똑같이 적어준다
    DocumentRoot /var/www/html
    ServerName hello.co.kr               -> 2-2 번에서 설정해준 사용자명 혹은 서버 호스트명은 이곳에 똑같이 적어준다
    ErrorLog logs/ssl_starkapin_com_error_log
    CustomLog logs/ssl_starkapin_com_error_log common
</VirtualHost>


이 또한 적용시키기 위해 #service httpd restart 명령으로 서비스 재시작


7. 443 포트 방화벽 설정


#vi /etc/sysconfig/iptables


-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT 구문 추가


#service iptables restart 서비스 재시작




이로써 모든 구축은 끝이 났다

확인 테스트 방법은 웹 브라우저에 

https://자기 ip 주소 or 127.0.0.1 입력 -> 인증서 오류 발생 -> 추가 정보 클릭 -> 정상적인 아파치 웹 페이지 화면 출력