라즈베리파이4 apache(아파치)에 무료 SSL 인증서 적용하기
아파치를 설치하고 접속하면 기본적으로 http로 접속하게 됩니다.
여러가지 이유가 있겠지만 https를 사용하기 위해서는 SSL 인증서를 적용해야 합니다.
상용SSL을 발급해주는 곳도 있지만 이번 포스팅에서는 무료 SSL 인증서를 다운받고 적용하는 방법에 대해 설명드리겠습니다.
라즈레비파이에 certbot, python3-certbot-apache 두개의 프로그램을 설치해주어야 합니다.
그러기전에 먼저 sudo apt update, sudo apt upgrade를 합니다.
다음은 apt list | grep certbot 명령어로 리스트 목록에 설치할 두 프로그램이 존재하는지 확인합니다.
이제 프로그램을 설치합니다. sudo apt-get install certbot python3-certbot-apache
설치가 완료되면 아파치를 잠시 스톱해야 합니다. 서트봇도 80포트를 사용하기 때문입니다.
sudo systemctl stop apache2.service
이제 서트봇을 실행합니다. sudo certbot --standalone -d www.내도메인주소.net certonly
그럼 처음으로 인증서 만료시 안내를 받을 이메일 주소를 입력하라고 합니다.
(인증서 만료는 90일이며 만료전에 갱신을 해준다면 계속해서 사용할 수 있습니다)
그 다음 약관에 동의하냐는 물음에는 동의를 합니다. A
다음은 마케팅에 이메일을 사용해도 되는지 묻는데 No를 합니다.
그럼 키가 발행됐다고 나오며 위치를 알려줍니다.
위치는 /etc/letsencrypt/live/내도메인주소.net/ 폴더이며 폴더안에 fullchain.pem, privkey.pem 파일이 있습니다.
다음은 아파치의 sites-enabled 폴더로 이동합니다.
cd /etc/apache2/sites-enabled/
그리고 sites-available 폴더에 있는 default-ssl.conf 파일을 심볼링크로 가져옵니다.
sudo ln -s ../sites-available/default-ssl.conf ./default-ssl.conf
(또는 간단한 아파치 명령어인 sudo a2ensite default-ssl.conf 로도 심볼링크가 생성됩니다. sudo a2dissite default-ssl.conf 명령어는 반대로 심볼링크를 삭제합니다.)
이제 vi 편집기로 default-ssl.conf 파일에 들어가면 VirtualHost 443 이라고 되어 있는 https 포트 설정을 합니다. sudo vi default-ssl.conf
-
DocumentRoot 웹문서가 들어있는 폴더 위치
-
SSLEngine on
-
SSLCertificateFile fullchain.pem 위치
-
SSLCertificateKeyFile privkey.pem 위치
다음은 ssl을 활성화 합니다. sudo a2enmod ssl
(참고로 "sudo a2enmod 모둘명" 명령은 아파치폴더 내에 있는 mods-available 폴더에 모듈을 mods-enabled 폴더로 심볼링크 해주는 명령어입니다. 반대로 비활성화 할 경우는 "sudo a2dismod 모듈명" 명령어로 합니다. 심볼링크가 삭제됩니다.)
이제 아파치를 다시 시작합니다. sudo systemctl start apache2.service
마지막으로 공유기를 통해 라즈베리파이를 사용하고 있다면 이전 포스팅을 참고하여 포트포워딩을 해줘야 합니다.
(https:도메인주소 입력으로 -> 공유기 443포트로 들어오는 패킷을 -> 라즈베리파이 443포트로 포트 포워딩)
포트포워딩까지 완료 되었다면 이제 브라우저를 통해 접속해 봅니다. 앞에 열쇠모양이 생겼을 겁니다.
certbot으로 발급받은 인증서는 유효기간이 90일 입니다.
인증서를 갱신하고 싶다면 아파치를 종료하고, sudo certbot renew 명령어를 입력하고, 다시 아파치를 시작하면됩니다.
다만 갱신은 만료 2주전부터 가능하다고 합니다.(혹자는 1달전부터 가능했다고 합니다.)
만료가 다가오면 위에서 certbot으로 키 생성시 입력한 메일 주소로 갱신안내 메일이 옵니다.
만약 기한이 많이 남아있는데도 갱신을 할 경우 아래와 같은 에러가 날 수 있습니다.
저는 2달마다 자동으로 인증서를 강제로(--force-renew) 재발급 받기 위해 크론탭을 이용하겠습니다.
먼저 su - 명령어로 루트로 진입합니다. (root 비밀번호를 지정하지 않으신분은 이번기회에 지정해주세요)
그리고 crontab -e 명령어로 root의 크론탭에 진입합니다.
그후 0 5 1 */2 * /usr/bin/certbot renew --force-renew --pre-hook "/bin/systemctl stop apache2.service" --post-hook "/bin/systemctl start apache2.service" 를 제일 아래라인에 추가해줍니다. (짧은 기간동안 너무 자주 재발급받으면 에러가납니다.)
추가로, http://도메인 접속시 https://도메인주소로 리다이렉트를 시키고 싶으시다면 아래와 같이 진행해야합니다.
rewrite 모듈을 사용하기 위해 sudo a2enmod rewrite 명령어를 실행합니다.
다음은 /etc/apache2/sites-enabled 폴더로 이동한 후 접속시 리다이렉트 시키고 싶은 주소의 conf 파일을 vi로 아래와 같아 수정합니다.
(저는 001-test.conf에 있는 80포트(http) ServerName주소로 들어오는 요청을 https로 리다이렉트 시키겠습니다.)
이제 아파치를 다시 시작합니다. sudo systemctl start apache2.service
라즈베리파이 전체보기
'라즈베리파이' 카테고리의 다른 글
라즈베리파이4 해킹공격 대비 ssh 기본포트 변경 (0) | 2021.01.10 |
---|---|
새로운 라즈베리파이 OS 릴리스 2020년 12월 (New Raspberry Pi OS release 2020. 12.) (1) | 2020.12.07 |
라즈베리파이(Raspberry Pi) 400 컴팩트 키보드에 내장된 제품 발매 소식 (0) | 2020.11.05 |