본문 바로가기

무료 보안서버 startSSL 설치하기

728x90
반응형

SSL를 설치할 서버는 centos5.x이고 카페24의 가상서버호스팅을 받은 것입니다. 웹서버는 apache2입니다.

 

openssl 모듈 설치 -> startssl.com에서 인증서 파일 4개를 구함 -> 적용하려는 웹서버에 인증파일 업로드 -> 아파치 가상호스트 추가 -> 재시작

 

 OpenSSL 설치 확인

인증서를 번역하려면 번역 프로그램(모듈)이 서버에 설치 돼 있어야 합니다.

drwxr-xr-x 2 root root 4096  6월 23 21:30 conf
drwxr-xr-x 2 root root 4096  6월 23 21:11 conf.d
lrwxrwxrwx 1 root root   19  6월 23 21:09 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root   29  6월 23 21:09 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx 1 root root   13  6월 23 21:09 run -> ../../var/run

#] ll /etc/httpd

httpd 디렉토리에 보면 modules라는 링크가 보입니다. 아파치가 구동 되면서 각종 모듈이 함께 작동하는데 이 곳에 그 모듈들이 모여 있습니다. #]ls /etc/httpd/modues 해보면 파일들이 많이 있는데 그 중에 mod_ssl.co가 있는지 확인 합니다. 있으면 openssl이 이미 설치 된 것이고 없다면 설치 해야 합니다.

#]httpd -l

이런 고상한 방법도 있습니다. mod_ssl.c라는 이름이 있으면 설치 된 것이고 없으면 설치 해야 합니다.

 

# yum install openssl

openssl은 아파치를 설치하면서 이미 설치 돼 있을 수 있습니다. 설치하기 전에 yum list installed openssl로 확인 해 봅니다.

 

# yum install mod_ssl*

ssl 모듈이 설치 됩니다. modules 디렉토리이 mod_ssl.so가 있는지 확인합니다. 

yum으로 openssl 모듈을 설치 합니다. 카페24에서는 APM을 RPM으로 설치하기 때문에 yum으로 간단히 설치 할 수 있습니다. 소스를 받아서 설치하는 방법은 컴파일 시간이 오래 걸립니다.

modules 목록 안에 mod_ssl.so 파일이 있는지 확인 합니다. 있다면 설치가 완료 됐습니다. 설치가 정상적으로 됐다면 conf.d 안에 ssl.conf가 있는 걸 확인 할 수 있습니다.

 

 conf.d/ssl.conf

이 파일을 열어보면(cat ssl.conf) 알고 있는 듯 알 수 없는 알 거 같은 내용들이 있습니다. 아파치에서 가상호스트 설정을 해 봤던 개발자라면 httpd.conf 파일을 알 것입니다. 외부 참조 파일로 httpd-vhosts.conf 파일을 만들어 쓰기도 합니다. ssl.conf을 열어보면 httpd.conf에서 봤던 내용들과 유사한 것들이 있습니다.

웹서버의 기본 포트는 80번입니다. 인증서를 포함한 보안서버의 포트는 443번입니다.(인증서 판매 회사에서 변경 할 수도 있습니다. 보통은 443을 많이 씁니다.)

httpd.conf는 80번 포트로 접속 했을 때의 가상호스트 설정 파일이고 ssl.conf는 443번 포트로 접속 했을 때의 가상호스트 설정 파일입니다. 이 파일은 나눠져 있지만 아파치가 실행 되면서 두 파일을 동시에 읽어 실행 시키기 때문에 ssl.conf의 내용을 httpd.conf에 작성해도 무관합니다. 파일을 나눠서 사용하든 httpd.conf에 몰아 넣든 그건 사용자 마음입니다. 저는 ssl.conf를 무시하기로 했습니다. 복잡한 건 질색이라 간단하게 하기로 했습니다. 일단 ssl.conf는 그냥 거기에 둡니다.

 

 

 

 

이제부터는 StartSSL로부터 인증서 받아오기입니다.

 

 StartSSL.com 가입하고 인증서 생성하기

openssl 모듈은 인증서를 해석하거나 암호화 하는 기능을 수행하는 프로그램입니다. 웹사이트의 인증서는 우리가 잘 알고 있는 공인인증서처럼 공개키 방식으로 정보를 암호화하는데 그 공개키를 발급해 주는 기관은 정해져 있습니다. 공인인증서의 공개키(인증서) 발급은 무료지만 증권거래 등에 사용하는 범용인증서는 유료입니다. SSL 인증서도 보통 유료로 발급을 해주는데 가격이 모두 다릅니다. 암호화 방식에 차이가 있을 수 있고 속도나 기타 서비스에 차별이 있습니다. 영리가 목적이 아닌 개인 사이트 운영자들에겐 서버 유지비 외에 매년 몇 만원씩 들어가는 인증서 가격도 아깝다는 생각이 들 수 있습니다. 그래서 무료 SSL을 많이 이용하고 있습니다.

http://startssl.com에서는 무(유)료 인증서 외에도 다양한 서비스를 제공해 주고 있습니다. 외국 기업이라 절차가 복잡해 보일 수 있지만 찬찬히 따라하다 보면 그리 어렵지 않습니다.

 

일단 사이트에 접속하면 이런 화면이 보입니다. StartSSL PKI입니다. PKI가 공개키 기반 암호화 방식을 뜻합니다. 첫번째 제품 Class 1을 선택합니다.

 

다음 페이지에서 Sign-up을 선택합니다. 나중에 인증서를 발급 받고 내 브라우저에 인증서가 등록이 된다면 Authenticate를 클릭했을 때 인증서를 통해 본인 확인이 되고 관리 패널로 이동 할 수 있게 됩니다. Sing-up을 클릭하면 간단한 가입 절차가 있습니다.

 

개인정보를 등록하는 곳입니다. 정보를 입력하고 Continue 하게 되면 입력한 정보가 정확한지 확인 절차에 들어갑니다. 가능하면 정확하게 입력해 주세요. 특히 입력한 주소와 우편번호가 정확한지 확인하시고 정보에 문제가 있으면 가입 인증 시간이 오래 걸릴 수 있습니다. 저도 처음엔 대충 입력 했다가 계속 가입 실패 하고 마지막에 정확한 정보를 입력하고 나니 금방 가입 확인 메일이 왔습니다. 

위의 정보를 입력했다면 메일로 인증 문자가 발송 됩니다.

 

 

메일을 열어보면 위의 내용이 들어 있고 Your authentication code is 뒤에 있는 문자를 복사해서 네모 칸에 붙혀넣기 합니다. 그리고 Continue 클릭.

 

Continue 클릭하면 보안키가 생성 됩니다.

 

Install 버튼을 클릭하면 생성한 보안키를 인증서에 적용합니다. 

이제 인증서 생성은 완료 됐습니다.

 

인증서 하나는 도메인 하나에만 적용 됩니다. 이제 생성한 인증서를 도메인과 매치 시켜야 합니다. Domain name validation을 선택한 후 Continue를 클릭합니다.

 

적용 할 도메인을 입력합니다. 

 

이메일을 확인 합니다. 위에 3개는 등록한 도메인에 설정한 이메일이여 합니다. 다른 주소의 이메일을 사용 하기 위해서는 4번째거를 선택합니다.

선택한 이메일로 또 인증 문자가 발송 됩니다. 확인 후 여기에 붙여넣기 합니다. 

지금까지는 도메인 인증 과정이였습니다. 일단 회원 가입을 한 후에 도메인을 등록하고 그 도메인이 유효한지, 등록한 도메인을 인증서에 맞게 적용 되었는지 확인했습니다.

 

생성한 인증서를 웹서버에 적용할 것이기 때문에 웹서버에서 사용할 인증키를 받아와야 합니다. 콤보에서 Web Server SSL/TLS Certificate를 선택합니다. 

우리가 사용하는 공인인증서에는 인증서 암호를 넣습니다. 그것과 마찬가지로 이 비밀번호는 인증서에서 유일하게 사용자가 지정하는 암호 문자입니다. 공인인증서의 비밀번호와 같은 역할을 합니다. 꼭 기억해 두어야 합니다.  비밀번호(Key)와 비밀번호 확인(Confirm)을 입력하고 나머지는 그대로 둔 채 Continue 합니다.

키가 생겼습니다. 내용을 통째로 복사해서 텍스트 파일로 저장합니다. 파일 이름은 일단 ssl.key로 합니다.

도메인을 또 추가 하는 창입니다. 도메인을 하나 등록 했기 때문에 콤보에 도메인이 하나가 보이는데 일단 Continue합니다. 

Add Domains는 서버도메인을 추가 한다는 의미였습니다. 아쉽게도 무료 인증서에서도는 서브도메인을 지원하지 않습니다. 그래서 www를 입력합니다. mydomain.com과 www.mydomain.com 모두 사용 할 수 있습니다.

여기서 Continue를 클릭하면 다음 cert key 받는 화면이 나오는데 캡쳐를 해 놓고 위에 ssl.key 화면과 비슷해서 삭제를 한 거 같습니다. 다음 화면은 위에 Save Private Key 처럼 텍스트 상자에 인증키 문자들이 나오는데 복사해서 ssl.crt로 저장합니다.  

 

구글 번역기를 돌려가면서 최대한 자세하게 설명을 하려고 했는데 캡쳐해야 될 화면도 많고 해석이 원만하지 않은 부분도 있어서 부족한 게 좀 있습니다. 나머지는 startsll.com의 F.A.Q에서 How to install에 추가 설명이 있습니다.

이 과정에서 두 개의 파일이 생깁니다. ssl.key와 ssl.crt입니다. 이 파일이 생겼다면 일단 과정은 성공적입니다.

 

Tool Box에서 얻어야 하는 건 SSL 발급 기관의 고유 인증서입니다. 분홍색 부분을 차례대로 클릭하면 두 개의 파일을 얻을 수 있습니다. StartCom Root CA(PEM encoded)를 클릭하면서 ca.pem을 얻을 수 있고 Class 1 Instermediate Server CA를 클릭하면 sub.class1.server.ca.pem를 얻을 수 있습니다. 이렇게 하면 파일이 4개가 됐습니다.

- ca.pem

- sub.class1.server.ca.pem

 

- ssl.key

- ssl.crt

지금까지 한 건 이 파일들을 얻기 위한 과정이였습니다. 이제는 이 파일들을 서버에 업로드하고 아파치 설정을 해줘야 합니다.

 

 인증서 파일 서버에 업로드하기

4개의 인증서 파일을 얻었다면 이 파일들을 서버에 업로드 해야 합니다. 업로드 위치는 사용자가 임의로 지정 할 수 있습니다. 카페24의 가상서버호스트를 사용하고 있다면 내 홈페이지가 위치한 경로는 /home에 위치해 있습니다. 예를 들어 계정 아이디가 myhome일 때 /home/myhome/www에 index.php 파일이 존재하게 됩니다. (www는 사용자가 바꿀 수 있음)

알툴의 알FTP를 이용해서 로그인 하면 www이 하의 디렉토리로는 이동 할 수 없습니다. 그렇기 때문에 /home/myhome/ssl이라는 디렉토리를 하나 만듭니다.

 

 홈디렉토리에 두 개 디렉토리가 있습니다. ssl은 인증서 파일을 업로드 할 곳이고 www는 홈페이지 파일들이 업로드 되어 있는 디렉토리입니다.

root로부터 절대경로를 보자면 /home/myhome/www는 홈페이지, /home/myhome/ssl은 인증서 위치가 됩니다. 캡쳐한 화면을 보면 파일명이 바뀌어 있는 걸 볼 수 있습니다. 제가 임의로 바꿨습니다. 일단 secret.txt는 무시하시기 바랍니다. 아까 등록한 인증서 비밀번호를 기록해 놓은 파일입니다. 10자리 이상이기 때문에 혹시 잊어 버릴까 싶어서 임의로 작성 해 둔 것입니다. 나중에 설정이 모두 끝난 후엔 삭제하고 비밀번호는 다른 곳에 메모해 두어야 합니다.

ssl.wonjustory.crt는 ssl.crt를 수정한 것입니다. ssl.wonjustory.key는 ssl.key를 수정한 것입니다. 파일 이름을 이렇게 바꾼 이유는 가상서버호스팅에 여러 계정이 있어서 계정마다 인증키 파일 이름을 다르게 하면 관리도 쉽고 나중에 작업하면서 섞일 일이 없기 때문에 알아보기 쉽게 하기 위해 임의로 변경 했습니다. 파일 이름은 사용자가 임의로 바꿀 수 있습니다. 확장자는 고정입니다.

 

이제 인증서 파일을 서버에 업로드 했으니 openssl을 설치했던 처음으로 다시 돌아갈 필요가 있습니다.

 

 

 

 

 httpd.conf, httpd-vhosts.conf, httpd-vhosts.ssl.conf

저는 httpd.conf 끝에서 httpd-vhosts.conf를 include해서 가상호스트 정보를 따로 관리 해 왔습니다. 관리의 편리성 때문입니다.

NameVirtualHost *:80
NameVirtualHost *:443

httpd.conf를 열어 NameVirtualHost *:80 아래에 NameVirtualHost *:443를 추가 해 주세요. 이 웹서버에 443번(보안서버) 포트로도 접속을 허용 하는 것입니다.

 

- httpd.conf

 

 

.

.

 

include conf/httpd-vhosts.conf
include conf/httpd-vhosts.ssl.conf

이제는 두 개의 파일을 include합니다. httpd-vhosts.conf는 80번 포트로 접속 했을 때의 가상호스트 정보입니다. httpd-vhosts.ssl.conf는 443(보안서버) 포트로 접속 했을 때의 가상호스트 정보입니다. 이 내용들은 파일 하나다 모두 작성해도 되지만 계정이 여러 개 일 때는 복잡하기 때문에 이렇게 용도에 따라 나눠 놨습니다.

- httpd-vhosts.conf

 

<VirtualHost *:80>
    DocumentRoot /home/wonjustory/www
    ServerName wonjustory.com
</VirtualHost>

이건 80번 포트로 접속 했을 때의 가상호스트 설정 부분입니다. 간단합니다. 로그파일은 일부러 생성하지 않았습니다. 보안서버를 설치하려는 개발자라면 익숙한 화면입니다.

-httpd-vhosts.ssl.conf

 

</VirtualHost>
   DocumentRoot /home/wonjustory/www
   ServerName wonjustory.com
   
   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

   SSLCertificateFile /home/wonjustory/ssl/ssl.wonjustory.crt
   SSLCertificateKeyFile /home/wonjustory/ssl/ssl.wonjustory.key
   SSLCertificateChainFile /home/wonjustory/ssl/sub.class1.server.ca.pem
</VirtualHost> 

 

 

이건 443(보안서버) 포트로 접속 했을 때의 가상호스트 설정 부분입니다. 보면 딱 이해가 됩니다. 위에 두 줄은 80번 포트와 같은데 SSLEngine on 밑으로 인증서 파일 경로를 지정하는 부분이 추가 됐습니다. 여기서 인증서 파일 경로를 지정하기 때문에 인증서의 위치와 파일 이름을 사용자가 임의로 바꿀 수 있는 것입니다.

가상호스트 설정은 포트마다 다르게 하는 이유는 무엇일까요?

http://wonjustory.com https://wonjustory.com은 전혀 다른 도메인으로 취급 됩니다. http는 웹서버 프로토콜로 내 웹서버로 바로 접속 되지만 https는 ssl를 발급한 기관의 보안서버를 거쳐서 오게 됩니다.

 

이제 httpd 설정까지 끝냈다면 아파치를 다시 시작합니다.

[root@wonjustory conf]# service httpd start
httpd (을)를 시작 중: Apache/2.2.3 mod_ssl/2.2.3 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server www.wonjustory.com:443 (RSA)
Enter pass phrase:**********

OK: Pass Phrase Dialog successful.

service httpd start를 하게 되면 아파치를 재시작하는데 Enter pass phrase뒤에 프롬프트가 나오고 실행이 정지 됩니다. 인증서 확인 키를 입력합니다. 위에 10자리 이상 입력했던 사용자 지정 비밀번호입니다.(공인인증서의 비밀번호와 같은) 인증서 비번을 입력하면 아파치 실행을 마저 끝냅니다.

 

- 만약 conf.d/ssl.conf에 내용 중 httpd-vhosts.ssl.conf에서 중복 된 부분은 주석처리 하거나 지웁니다.

   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

   SSLCertificateFile /etc/ssl/default.crt
   SSLCertificateKeyFile etc/ssl/default.key
   SSLCertificateChainFile etc/ssl/default/sub.class1.server.ca.pem

이런 내용은 ssl.conf에도 있는데 같은 문장들이 있으면 주석처리(#) 합니다. <VirtualHost _default_:443> ~ </VirtualHost>안에 내용은 모두 주석처리 합니다. 사이트 접속시 에러가 없다면 그냥 두셔도 무관합니다.

 

만약 https로 사이트에 접속 했을 때 이런 인증서 오류를 만났다면 당황하지 않으셔도 됩니다. https로 접속한 페이지의 콘텐츠 경로는 모두 도메인이 포함 된 절대경로여야 합니다. 음성파일, 영상파일, 이미지까지 모두 페이지 보안에 영향을 줄 수 있는 콘텐츠이기 때문에 https가 포함 된 절대경로를 사용해야 합니다.

예를들어 <img src="image/mypic.gif">이렇게 이미지를 사용했다면 <img src="https://mydomain.com/image/mypic.gif">처럼 절대경로를 사용해야 합니다. 음성이나 영상 파일을 사용 할 때도 같은 방법으로 해야 합니다.

 

모든 페이지의 이미지 경로를 이렇게 바꿀려면 꽤나 손이가는 작업입니다. 인증서를 이용하는 이유는 서버와 통신할 때 주고받는 데이터를 암호화 해 정보를 보호하기 위한 것이기 때문에 개인정보를 취급하는 페이지에서만 적용해도 됩니다. 회원가입과 로그인 부분에 선택적으로 적용해도 무관합니다.

긴 여정이였습니다.

사실은 보안서버 적용하는 시간보다 이 블로그를 쓰는 시간이 더 오래 걸렸습니다.

아직 사이트 두 개에 더 보안서버를 적용해야 합니다.

다음에는 회원 아이디 하나로 도메인 마다 인증서를 여러 개 발급 받는 방법을 포스팅 하도록 하겠습니다.

한 번 설정 해 두면 1년 간은 그대로 사용 할 수 있는데 1년 뒤에 인증서를 갱신할 때 사용하던 브라우저가 아니거나 포멧을 했다면 새 이메일로 인증서를 재발급 받아야 합니다. 그런 불편함을 덜기 위해서 인증서를 백업받으면 편합니다.



출처: https://ziumb.tistory.com/62?category=745278 [지음빌더]

728x90
반응형