상세 컨텐츠

본문 제목

웹사이트 SSL 적용하기 (http -> https)

서버설정

by fsteam 2014. 4. 16. 16:04

본문

정보통신망법 개정에 따라 영리를 목적으로 개인정보 수집시 보안서버 구축이 의무화 되었다고 한다.

위반시 과태료 3,000 만원.. 2012년 8월에 발표되었다고 하는데.. 헐..

우리나라가 보안이라는 분야에 무관심한건 사실인거 같다. 근래에 발생하는 개인정보 유출 사태들만 봐도..


아무튼 웹서버 평문전송하는걸 막고 암호화 전송을 처리해 주기 위해서 SSL을 적용하기로 했다.

일단 필요한 요소를 살펴보자.


1. 서버인증서 구매

과거 베리사인이 독점할 당시에는 엄청 비쌌던걸로 기억하는데.. 서버인증서 사업도 경쟁구도가 되다보니 많이 저렴해졌다.

인터넷에 검색하다보니 상상도 못할 가격의 저렴한 인증서들이 있다.

인증서 구매시 CSR(Certificate Signing Request) 생성해서 보내야 하는데, 이건 각 업체의 메뉴얼에 따르면 된다.


2. 인증서(Certificate) 설치

구매후 파일로 받은 인증서를 서버의 적당한 곳에 저장하면 된다.


3. 웹 서버 설정

나는 리눅스, 아파치 환경에서 적용했으므로 이걸 기준으로 설명한다.

 - 리눅스 : CentOS 5.10

 - 아파치 : 2.2.3


1) 먼저 mod_ssl 설치되었는지 확인하고 없으면 설치하자.

# yum install mod_ssl

mod_ssl 설치후 아파치를 재시작 해보면 기존 80 포트 외에 443 포트가 listening 하는걸 볼수 있다. (SSL 기본 포트)


2) 다음은 httpd.conf 파일 수정

VirtualHost를 사용하고 있으므로... 기존 80 포트외에 443 포트를 추가했다.


기존 VirtualHost 설정은 vhosts.conf 라는 파일로 별도로 관리하고 있었는데.. SSL 적용을 위해서
ssl_vhosts.conf 파일을 하나 만들고 httpd.conf 파일에 인클루드 해줬다.


ssl_vhosts.conf 파일의 내용은 다음과 같다.


기존 VirtualHost 설정법과 유사한데.. SSL 관련된 설정 부분이 조금 더 추가된다.


아래 내용은 그대로 추가

 SSLEngine on

 SSLProtocol all -SSLv2

 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

 SetEnvIf User-Agent ".*MSIE.*" \

         nokeepalive ssl-unclean-shutdown \

         downgrade-1.0 force-response-1.0


아래 내용은 각자의 환경에 맞게 설정
 SSLCertificateFile : 인증서 파일의 경로
 SSLCertificateKeyFile : 개인키 파일의 경로
 SSLCertificateChainFile : 인증서 체인파일 경로

3) 아파치 재시작
헐.. https://도메인주소 입력했더니.. 요란하게 에러가 뜬다.
아파치 errorlog 열어봤더니 다음과 같은 에러가 발생
RSA server certificate CommonName (CN) `xxxxxx.com' does NOT match server name

구글링해봤더니.. CentOS 5.10 버전에서 default SSL 인증서를 읽어오기 때문이란다..
conf.d/ssl.conf 파일을 열어봤더니.. default 인증서 읽어오는 부분이 있더라..
ssl.conf 파일의 VirtualHost 부분을 없애버리고 아파치 재가동.. 성공!!

ps1) 페이지에서 보안되지 않은 항목을 표시할까요? 라는 메시지가 나올수 있는데

이건 소스안에 https 가 아닌 http 가 포함된 경우에 발생한다.

ssl 적용할거면.. 절대경로URL 보다는 상대경로 URL 로 개발하시길..


ps2) SSL 적용하면 평문(plain text)이 아닌 암호화(encryption text) 된 데이터를 서버와 브라우저간 주고받는다.

당연히 Encryption, Decryption 과정에서 서버의 리소스를 잡아먹게 되므로.. 모든 페이지에 SSL 적용은 비추한다.

서버 자원낭비를 막기위해 회원가입, 로그인, 프로필조회 등.. 암호화가 필요한 부분에만 https 를 적용하는게 좋겠다.


관련글 더보기