ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Let's Encrypt를 사용하여 HTTPS 설정하기
    Web 2020. 8. 9. 21:15

    보안상의 이유로 https를 사용하는 것이 중요하기도 하지만 사용하려는 기능이 https를 필요로해서일 때도 있다. 

    본인은 web push 기능을 구현하기 위해서 설정해야했다. 

     

    여러 튜토리얼들을 돌았는데 Let's Encrypt를 사용하는 것이 제일 간단한 것 같다. 

     

    준비물:

    IP주소가 아니라 도메인 이름

    Apache

     

    설치 과정 

    도메인 이름이 있으면 과정은 어렵지 않다. 참고로 그냥 실습이 목적이라면 freenom 에서 간단하게 도메인 이름을 설정할 수 있다. 이제 아래 명령어들을 입력해서 certbot 등 let's encrypt에 필요한 것들을 설치하면 된다. 

    sudo apt-get update
    sudo apt-get install software-properties-common
    sudo add-apt-repository universe
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt-get update
    sudo apt-get install python-certbot-apache

     

    위처럼 설치할 때에 아무런 에러가 뜨지 않는다면 최선이지만 혹시 'sudo add-apt-repository universe' 명령어를 입력했을 때 에러가 떴다면 나는 개인적으로 아래의 명령어들로 해결했다. 

    cd /usr/lib/python3/dist-packages/
    sudo cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so

     

    Apache 설정 파일 수정

    만약에 도메인 이름을 설정한지 얼마 되지 않았다면 아파치 conf 파일에 아래에 두번 째 줄처럼 서버 이름을 적어주어야 한다. 그리고 WSGI 관련된 부분들을 주석처리 해준다. 

    <VirtualHost *:80>
    	ServerName www.webpush.tk <---- 이렇게 추가
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    
            <Directory /home/dodo/project/django_project/photo/photo>
                    <Files wsgi.py>
                            Require all granted
                    </Files>
            </Directory>
    
            #WSGIDaemonProcess photo python-path=/home/dodo/project/django_project python-home=/home/dodo/.virtualenvs/new_django
            #WSGIProcessGroup photo
            #WSGIScriptAlias / /home/dodo/project/django_project/photo/photo/wsgi.py
    
    </VirtualHost>

     

    Let's Encrypt

    이제 아래 명령어로 Let's Encrypt를 사용해보자

    sudo certbot --apache

    그러면 아래처럼 해당 주소에 HTTPS를 활성화할 건지 물어본다. 여기서부터 몇가지 설정에 필요한 질문들을 물어보는데 필요한데로 답하면 된다. 이 과정이 다 끝난다면 아파치 conf 파일이 수정되고 해당 conf 파일의 이름에 '-le-ssl.conf' 가 붙은 새로운 파일이 생성된 것을 확인할 수가 있다. 

     

    예를 들어서, 기존에 사용하던 000-default.conf 파일은 아래처럼 변할 것이다. Rewrite 관련된 부분들이 https로 바로 갈 수 있도록 설정되어 있다. 참고로 나는 위 let's encrypt 과정에서 http로 접속하면 바로 https로 redirect되게 설정했다. 나는 tutorial을 따라서 directory 부분은 없애주었다. 

    #000-default.conf
    <VirtualHost *:80>
    	ServerName www.webpush.tk <---- 이렇게 추가
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    
            #WSGIDaemonProcess photo python-path=/home/dodo/project/django_project python-home=/home/dodo/.virtualenvs/new_django
            #WSGIProcessGroup photo
            #WSGIScriptAlias / /home/dodo/project/django_project/photo/photo/wsgi.py
            
            RewriteEngine on
            RewriteCond %{SERVER_NAME} =www.webpush123.tk
            RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    
    </VirtualHost>

    새로 생긴 000-default-le-ssl.conf 파일도 조금 손 볼 필요가 있다. 일단 기존의 conf 파일과 많이 다른 부분은 없지만 Rewrite 부분이 없고 대신 SSLCertificate 부분이 있는 것을 관찰할 수 있다. 이제 WSGI 부분들의 주석처리를 풀어주면 된다. 따라서 아래와 같은 결과가 된다. 

    <VirtualHost *:80>
    	ServerName www.webpush.tk
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    
            <Directory /home/dodo/project/django_project/photo/photo>
                    <Files wsgi.py>
                            Require all granted
                    </Files>
            </Directory>
    
            WSGIDaemonProcess photo python-path=/home/dodo/project/django_project python-home=/home/dodo/.virtualenvs/new_django
            WSGIProcessGroup photo
            WSGIScriptAlias / /home/dodo/project/django_project/photo/photo/wsgi.py
            
            SSLCertificateFile /etc/letsencrypt/live/www.webpush123.tk/fullchain.pem
    	SSLCertificateKeyFile /etc/letsencrypt/live/www.webpush123.tk/privkey.pem
    	Include /etc/letsencrypt/options-ssl-apache.conf
    
    </VirtualHost>

     

    마무리

    이제 아래 명령어로 apache가 제대로 작동하는지 확인해 보고 방화벽이 https를 허용하도록 설정해주면 된다. 

    sudo apachectl configtest
    sudo ufw allow https
    sudo service apache2 restart

    이제 해당 페이지에 들어가보면 https 로 바로 전환하는 것을 자물쇠 표시로 확인할 수 있다. 

     

    참고

    https://www.youtube.com/watch?v=NhidVhNHfeU&t=707s

Designed by Tistory.