I.K.Picture & IT Info.

[Ubuntu] Apache2 SSL 인증서 무료로 SSL 사이트 구축 본문

Development/Web

[Ubuntu] Apache2 SSL 인증서 무료로 SSL 사이트 구축

helpful-intruder 2018.05.21 18:56

이 문서는 Ubuntu 16.04 LTS 기준으로 작성되었습니다.


간단하게 테스트를 위해 사이트를 구축하거나 개인 사이트를 운영하기 위해 사용되는 

서버에서 SSL 인증서를 구매해서 사용하기에는 너무 부담이 될 수 도 있어서 무료로 발급받아 적용하는 방법에 대해 정리를 해보려고 합니다~ 


발급하는 기관은 "Let's Encrypt" 입니다. (https://letsencrypt.org/)


발급하는 과정이 우분투 기반으로는 16.04 LTS 기준으로는 쉽게 설치하고 사용할 수 있어서 편리하게 활용할 수 있습니다.


일단 진행하기전 간단하게 apache2 웹 구성하는 방법에 대해 정리할께요 

$sudo apt install apache2

$sudo a2enmod rewrite

$sudo a2enmod headers

$sudo a2enmod ssl

$sudo a2dismod -f autoindex



간편하게 아래 명령어로 발급 프로그램을 설치합니다.

참고사항으로 도메인이 있다고 가정합니다. 

(참고로 제가 작성한 글에서는 

   도메인 DNS를 카페24에서 제공하고 있는 것을 사용하여 

   개인서버에 도메인을 연결시켜놓은 것이여서 

   별도 DNS 관련해서는 설명하지 않습니다)


$sudo apt install letsencrypt 



그 다음 바로 도메인에 대해 인증서를 발급받도록 명령어를 아래 예와 같이 실행합니다.


$sudo letsencrypt certonly --webroot --webroot-path=웹Root디렉토리 -d 도메인명 

저 같은 경우 웹 디렉토리를 /home/intruder/public_html 이라 가정하고 도메인은 test.engintruder.com 으로 가정하겠습니다. 

  $sudo letsencrypt certonly --webroot --webroot-path=/home/intruder/public_html -d test.engintruder.com


이렇게 수행하면 문제가 생길 경우 알림을 받는 이메일을 작성하라는 창과 관련 인증서에 대한 동의 내용이 보여지게 됩니다. 


Apple | iPhone 7 | 1/24sec | F/1.8 | 0.00 EV | 4.0mm | ISO-32  Apple | iPhone 7 | 1/30sec | F/1.8 | 0.00 EV | 4.0mm | ISO-32



이렇게 하면 인증서는 발급받은 것이고 이제 서버에 설치된 apache에 등록을 해야하는데요 

일단 기본적으로 인증서는 /etc/letsencrypt/live/도메인명   위치에 발급이 됩니다. 

cert.pem > 인증서 파일

chain.pem > 인증서 발급자 파일

fullchain.pem > cert.pem과 chain.pem을 합쳐놓은 파일

privkey.pem > 개인키 



아파치 설정에서 도메인을 연결하면서 SSL을 적용하면됩니다. 

설정 파일에서 /etc/apache2/site-available/[도메인명].conf 를 만들어서 아래와 같이 작성하면됩니다. 

(저 같은 경우 도메인을 test.engintruder.com 이라고 가정하도록 하겠습니다.)


/etcapache2/site-available/test.engintruder.conf

<VirtualHost *:80>


    ServerName test.engintruder.com


    <IfModule mod_rewrite.c>

    RewriteEngine on


    RewriteRule ^ - [E=protossl]

    RewriteCond %{HTTPS} on

    RewriteRule ^ - [E=protossl:s]


    RewriteCond %{HTTPS} !=on

    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


    </IfModule>


</VirtualHost>



<VirtualHost *:443>


    ServerName test.engintruder.com


    DocumentRoot /home/intruder/public_html


    <Directory /home/intruder/public_html>

        Options FollowSymLinks MultiViews

        AllowOverride All

        require all granted

    </Directory>


    ErrorLog ${APACHE_LOG_DIR}/test.engintruder.com-error.log

    CustomLog ${APACHE_LOG_DIR}/test.engintruder.com-access.log combined


    Header always set Strict-Transport-Security "max-age=31536000"


    SSLEngine on


    SSLProtocol all -SSLv2 -SSLv3


    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA


    SSLHonorCipherOrder on


    SSLCertificateFile "/etc/letsencrypt/live/test.engintruder.com/cert.pem"

    SSLCertificateKeyFile "/etc/letsencrypt/live/test.engintruder.com/privkey.pem"

    SSLCertificateChainFile "/etc/letsencrypt/live/test.engintruder.com/chain.pem"


</VirtualHost> 

※ 빨간색 글씨 대신 각자 알맞는 도메인, root 디렉토리, 인증서 디렉토리 로 변경하면됩니다. 



아시는 분은 아시겠지만 site-available 폴더에 있는 설정은 아직 활성화 전이기 때문에 이를 활성해 해줘야합니다.

$sudo a2ensite test.engintruder.com.conf 

$sudo service apache2 restart



참고로 Let's Encrypt는 3개월짜리 인증서라고 합니다.

그렇기 떄문에 만료일 기준 1개월전부터 갱신을 해야하는데 그 부분도 간단한 명령어를 통해 할 수 있다고 합니다.


$sudo letsencrypt renew 




Comments
댓글쓰기 폼