-
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 로 바로 전환하는 것을 자물쇠 표시로 확인할 수 있다.
참고
'Web' 카테고리의 다른 글
Google Cloud Platform(GCP)로 간단하게 서버 생성하기 (0) 2020.07.06 데비안(Debian)에 MySQL 설치하기 (0) 2020.07.04 Ubuntu(우분투)에 MySQL 설치하기 (0) 2020.07.03