1.
Let's Encrypt 와일드카드 인증서 적용이 쉬울지 기대를 많이 했었습니다. 그런데 와일드카드 인증서 생성/갱신 시마다 DNS서버에서 키값을 매번 만들어서 인증해야 한다는 소식을 접했습니다. 개인 입장에서 이 과정이 무척 번거롭게 느껴지더군요. 그래서 포기.
2.
우분투에서 Let's Encrypt 인증서 설치는 (공식적으로) Certbot을 추천합니다.
( https://letsencrypt.org/getting-started/ => 에서 With Shell Access 항목 참고.)
Certbot이 세팅을 자동 처리해주는 것은 좋은데 아파치 설정 어디를 어떻게 바꾸는지 알려주지 않는 게 불안해서(꼬이면 복구하기 힘듬), 번거롭더라도 (Certbot 없이) 수동으로 Let's Encrypt 인증서를 적용하기로 결정했습니다.
제가 처리했던 과정을 적는 거라, 튜토리얼처럼 완벽하지는 않을 겁니다. 감안하고 봐주세요.
이번에도 https://blog.lael.be/post/5107 라엘님의 글이 큰 도움이 됐습니다.
-------------------------------------------
1. Let's Encrypt 패키지 설치
▲ 패키지들을 업그래이드해 줍니다.
sudo apt-get update
sudo apt-get upgrade
▲ (이건 옵션)
apt-cache search 명령어로 Let's Encrypt 관련 패키지들을 찾아봅니다.
▼ 참고로 우분투 16.04의 패키지저장소 검색시 나오는 목록들은 이렇습니다.
아무튼,
letsencrypt가 더미 패키지라는 설명이 찜찜해서 apt-cache show 명령어로 정보를 좀 더 봅니다.
잘 모르겠습니다. -_-;; 그냥 설치하겠습니다.
▲ sudo apt-get install letsencrypt
의존성 패키지로 certbot도 엮여서 설치되네요? -_-;;
▲ 우분투 16.04의 letsencrypt 의존성 패키지들인데, 구성이 조금 다르지요?
그럼... 설치하는 김에 certbot PPA도 추가해줍니다(선택사항).
▲ sudo add-apt-repository ppa:certbot/certbot
(참고로 PPA 삭제는 sudo add-apt-repository --remove ppa:certbot/certbot 처럼 입력해서 하면 되는데, PPA로 추가한 패키지들은 그대로 남아있습니다. 패키지들까지 한꺼번에 제거하고 싶다면 ppa-purge 패키지를 설치하고(sudo apt-get install ppa-purge), sudo ppa-purge ppa:certbot/certbot 처럼 입력하면 된다고 합니다.)
※ 우분투 16.04 LTS는 아래 링크를 참고하여 CertBot을 설치하도록 합니다.
https://certbot.eff.org/lets-encrypt/ubuntuxenial-apache
2. Let's Encrypt 인증서 수동 발급
각설하고,
①
Let's Encrypt 인증서 생성을 위한 통신은 HTTP(기본값 80포트)를 통해서 이루어지는 점을 알아두세요.
만약 HTTPS를 세팅한 적이 있어서 80포트로 접속했을 때 443포트로 강제 Redirection되도록 설정한 적이 있거나, HSTS 설정을 해서 HTTPS 접속이 강제되는 상황이라면... 웹서버 프로그램(아파치) 서비스를 중지시켜서 443포트 강제접속을 막고 HTTP로 기본 접근되게끔 해두셔야 합니다.
②
도메인 구입 사이트에서 연결 세팅 정도는 기본적으로 하셨어야겠죠?
이제 아파치 <VirtualHost> 설정이 담긴 conf 파일을 열어보세요. 확인할 게 있거든요.
(아파치 설정을 변경한 적이 없다면 /etc/apache2/sites-enabled/000-default.conf 파일을 열면 됩니다.)
▲ DodumentRoot 경로를 확인하세요. index.html 파일이 있는 곳이에요.
ServerName 과 ServerAlias 에 할당된 도메인을 확인하세요
(도메인은 실제로 연결되어 있어야 함. 호스트파일 수정으로 속인 도매인은 안 됨.)
아파치 서비스가 돌아가고 있는 상태에서 인증서 생성을 시도해봤습니다.
터미널 창에서 아래 형식처럼 지켜서 입력!
sudo letsencrypt certonly --webroot -w /var/www/html/jimnongtest1-blog/ -d blog.jimnongtest1.top -d www.jimnongtest1.top
( sudo letsencrypt certonly --webroot -w 웹문서 루트 경로 -d 주소1 -d 주소2 -d 주소3 )
( letsencrypt 명령어 대신 certbot 명령어 쓰셔도 됩니다. )
webroot는 웹인증 방식으로 진행하겠다는 옵션인데, 내 컴퓨터의 letsencrypt 프로그램이 -w 경로에 임시로 파일을 생성하고 letsencrypt 사이트 측의 인증프로그램이 이 파일에 접근할 수 있으면 -d 옵션의 도메인들을 인증해주는 식으로 진행된다고 합니다.
※ 참고로 https://certbot.eff.org/docs/using.html#webroot 의 설명에 따르면
명령어 한 줄에 다수의 웹문서 루트 경로+주소들을 적을 수 있다고 합니다. 하나의 인증서에 정보를 담겠다는 건데...
( letsencrypt certonly --webroot -w 경로1 -d 주소1 -d 주소2 -w 경로2 -d 주소1 -d 주소2 )
저는 하나의 웹문서 경로에 지정된 도메인들만 하나의 인증서로 묶는 것이 보기 좋다고 생각합니다(라엘님 글의 취지에 공감). 그래서 웹문서 경로의 수만큼 인증서를 만드는 것을 추천합니다.
------------------------------------------------
※ Rate Limits(빈도 제한?) 정책이 있습니다.
https://letsencrypt.org/docs/rate-limits/
만약 첫번째 시도에서 에러 뜨면서 진행이 막히면 다시 도전해서 리밋횟수 까먹기보다는
--dry-run 옵션을 붙여서 통과될 때까지 "테스트"한 다음 테스트 통과하면 --dry-run 옵션 빼고 정식으로 진행하는 것을 추천합니다.
▲ --dry-run 옵션은 certonly와 renew 명령에만 붙일 수 있는 옵션입니다.
▲ 이런 식으로 --dry-run 을 붙여서 쓰면 되고, dry run 성공했다는 메세지가 뜨면 테스트 성공한 겁니다.
▲ 도움말 전체가 궁금하신 분들을 위해 캡처해 봤습니다.
--register-unsafely-without-email 이라는 옵션은 개인적으로 추천하지 않습니다.
https://certbot.eff.org/docs/using.html
위 링크에 다양한 옵션 값들에 대한 설명이 있습니다.
------------------------------------------------
본론으로 돌아와서.
▼ -w 옵션과 --webroot-path 옵션은 기능이 같아요.
갱신 소식을 전해줄 이메일 주소, 동의(a), 응(y) 을 차례로 입력했더니...
(이메일 안쓰고, 동의(a), 아니(n) 선택해볼 걸 그랬습니다. 찝찝하네요.)
▲ /etc/letsencrypt/live/blog.jimnongtest1.top/ 경로에 인증서들이 저장됐다고 나오더군요.
▲ 경로를 조회해봤더니 인증서가 정상적으로 생성된 것이 확인됩니다!
▲ 파일관리자 프로그램을 루트 권한으로 띄운 다음 cert.pem 파일을 더블클릭 해보니
입력했던 도메인 정보들이 보이네요. 성공한 듯.
▼ 절취선 시작
--------------------------------------------------------
여기서부터 절취선 끝나는 곳까지는 제가 궁금해서 시도해보는 것들입니다. 나중에라도 궁금한 점이 더 생기면 실험해보고 적을 거고요.
따라하실 필요 없고(필요한 상황이 오면 그 때 참고하세요.), 절취선 끝나는 곳부터 따라하시면 됩니다.
1. 생성했던 Let's Encrypt 인증서 폐기(revoke)
(참고 링크 : https://letsencrypt.org/docs/revoking/ )
▲ sudo letsencrypt revoke --cert-path /etc/letsencrypt/archive/blog.jimnongtest1.top/cert1.pem
처럼 입력했더니, 친절하게 PC에 남겨진 인증서 파일까지 지워주겠다고 묻네요. 당연히 yes.
( 2018. 12. 15. 추가 : revoke 명령어 치기 전에 터미널 창에서 ll /etc/letsencrypt/archive/blog.jimnongtest1.top/ 처럼 쳐보고, 가장 최근에 생성된 cert숫자.pem 파일명을 넣어줘야 합니다. 저는 갱신 두세번쯤 했더니 cert3.pem 이 최신 인증서더군요.)
▲ 심볼릭 링크가 있던 /etc/letsencrypt/live/blog.jimnongtest1.top/ 디렉토리, 인증서가 있던 /etc/letsencrypt/archive/blog.jimnongtest1.top/ 디렉토리가 말끔하게 사라졌습니다.
참고로 /etc/letsencrypt/accounts 디렉토리 내에 있는 이상한 디렉토리를 지워봤더니, 인증서 새로 발급받을 때 이메일 주소를 다시 물어보더군요. 그리고 구글링해보니 account와 도메인은 연결되어있지 않다고 합니다(아래 링크의 schoen 댓글 참고).
갱신과는 관계가 있는 듯하니, 갱신이 잘 안될 때에는 schoen의 댓글처럼 계정 재생성+/etc/letsencrypt/renewal/ 디렉토리 내 파일들의 내용을 손보는 식으로 수리하면 될 듯합니다.
2. 아파치 서비스 중단 시에도 Let's Encrypt 인증서가 생성되는가?
letsencrypt certonly 명령어가 80포트 사용 중일 때는 에러가 난다는 포스팅이 검색되더군요. 80포트 쓰는 서비스를 중단시키고 진행하라고.
위 문구는 제가 "Let's Encrypt 인증서 생성을 위한 통신은 80포트(HTTP)로 한다"고 적은 것과 완벽하게 대치됩니다. 그래서 실험해볼 가치가 있다고 판단했습니다.
▲ 아파치 서비스가 80포트를 점유하고 있음을 확인. 아파치 서비스를 중단한 다음 80포트 점유하는 서비스가 없음을 확인했습니다.
▲ 이후 letsencrypt certonly 명령어로 인증서 발급을 시도했는데, 이상 없이 진행되었습니다.
폐기했던 인증서를 재생성해서 그런지 이메일 주소를 다시 묻지는 않네요.
미심쩍어서, Let's Encrypt 인증서를 생성한 적이 없는 도메인으로 시도해봤습니다.
▲ 그렇죠. 이렇게 안되는 게 논리상 맞죠.
jimnongtest1.top 도메인이 성공했던 것은 Let's Encrypt 서버에 DNS 정보가 저장된 적이 있어서 그런 게 아닌가 싶습니다.
▲ 아파치 서비스 작동시켜서 80포트 열고 시도했더니 테스트 통과합니다.
▲ Let's Encrypt 서버에 정보 남겼으니까, 아파치 서비스 죽이고 다시 테스트해볼까요?
역시나 통과합니다.
결론 : 80포트로 통신하게끔 세팅하고 진행하는 게 정석입니다.
아파치로 HTTPS 연결을 강제했을 때에는 어떻게 될지 모르겠습니다. 나중에 실험해보고 결과를 적겠습니다.
3. DNS 서버 단에서 www Re-Direct 설정된 도메인의 Let's Encrypt 인증서 발급
▼ 저는 NameSilo에서 도메인을 구입하고 DNS까지 무료로 이용하는데, www redirect 프리셋을 제공하더군요.
예를 들어, 웹브라우저 주소창에 jimnongtest2.top 이라고 치면 DNS 측에서 www.jimnongtest2.top 이라고 바꿔서 주소창에 적어주기까지 합니다. 당연히 www.jimnongtest2.top 으로 접속되고요.
위 스샷을 보면 아시겠지만 A레코드에 제 컴퓨터 IP는 안 적었고, CNAME 호스트네임에 와일드카드(*)을 써놔서 www가 안 붙은 도메인으로는 사실상 접속이 불가능한 상황입니다.
이런 경우에도 jimnongtest2.top 과 www.jimnongtest2.top 주소를 합쳐서 하나의 Let's Encrypt 인증서가 발급되는지 궁금했습니다.
▲ 일단 발급은 성공했네요.
▲ cert.pem 파일을 봐도 www가 붙은 도메인과 안 붙은 도메인이 함께 적혀 있네요.
결론 : 되네요!
(80포트 연결 가능했던 게 성공의 요인이었던 것 같습니다.)
4. 80포트는 443포트로 Redirect, HSTS, HTTP/2 콤보 상태에서 인증서 재발급이 가능할까?
▲ 80포트가 열려있긴 한데 https로 Redirect 되게끔 설정하고 HSTS까지 세팅한... 총체적 난국 환경입니다.
과연... 기존에 받은 사이트의 인증서를 다시 발급받을 수 있을까요?
▲ 갱신 절차를 밟는 것 같고, 성공하네요.
5. 홈서버에서 Re-Direct 설정된 도메인의 Let's Encrypt 인증서 발급은 정상적으로 될까?
3번 궁금증과 연계해서 보시면 될 듯합니다.
DNS 서버에서 www redirect 기능을 풀고 홈서버에서 redirect 기능으로 www redirect 를 구현했죠.
▲ 이렇게요.
▲ 그리고 jimnongtest3.top 과 www.jimnongtest3.top 주소의 인증서를 받으려고 테스트했더니
jimnongtest3.top 경로에 대한 정보가 없다고 진행이 안 됩니다. (이치에 맞네요.)
▲ 그래서 www redirect를 주석처리하여 기능을 못하게 하고
jimnongtest3.top 과 www.jimnongtest3.top 인증서 획득 테스트를 재시도했더니
jimnongtest3.top 주소 연결 거부라고 진행 중단.
▲ 그래서 www.jimnongtest3.top 에 대해서만 인증서 발급을 테스트해봤더니
성공!
결론적으로 DNS서버와 홈서버 모두에 완벽하게 연결된 도메인/서브도메인만 인증서 발급이 되는 것 같습니다.
특히 홈서버에서 redirect 처리한 도메인은 인증이 안되는 점, 주의해야 하겠습니다.
▼ 절취선 끝. ▼
--------------------------------------------------------
3. 발급받은 인증서를 아파치에 적용
공유기 포트포워딩 기능으로 443포트를 개방합니다.
우분투에 방화벽을 세팅한 적이 있다면 역시 방화벽에서 443포트를 개방합니다.
(이 부분은 따로 설명하지 않습니다. 잘 모르시면 검색해서 해결하세요.)
▲ 참고로 우분투 18.04 데스크톱 버전 설치 직후에는 방화벽이 비활성 상태입니다.
그래서 기본 상태에서는 공유기 방화벽만 신경쓰면 됩니다.
참고로 ufw를 gui로 제어하고 싶다면 gufw 라는 패키지를 설치하시면 될 겁니다.
gufw 사용법은 https://blog.naver.com/35mwlee/221143838817 이 글이 잘 설명한 듯합니다.
UFW에 대해 참고할만한 링크는 아래와 같습니다.
https://help.ubuntu.com/community/UFW
https://extrememanual.net/12019
본론으로 돌아와서.
▲ 터미널 창에서
sudo a2enmod ssl
sudo a2ensite default-ssl
(.conf 확장자 빼도 됩니다.)
sudo service apache2 restart
를 차례로 입력합니다.
▲ sudo netstat -atlpvn
이라고 입력하여 아파치 서비스가 443포트를 열고 있는지 확인합니다.
제가 default-ssl.conf 사이트 설정 파일을 활성화하라고 적었던 데에는 default-ssl.conf 파일의 구조를 파악하기 위함이었습니다.
/etc/apache2/sites-enabled/default-ssl.conf 파일에서 주석처리 안 된 부분만 빼서 보면 구조가 아래와 같습니다.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "₩.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c> 안에 443포트 <VirtualHost>를 가두는 식으로 구성하면 된다는 것을 알았으니, default-ssl.conf 파일에서 <IfModule> 안의 VirtualHost 설정을 주석처리(#)하고 새로운 <VirtualHost *:443> 설정을 추가하거나, 터미널 창에서 sudo a2dissite default-ssl.conf 라고 입력하여 default-ssl.conf 설정을 비활성화한 다음 새로운 설정 파일을 추가 후 <VirtualHost *:443> 설정을 넣으면 되겠습니다(또는 기존의 conf 파일에 <VirtualHost *:443> 설정 삽입.).
▲ 저는 default-ssl.conf 설정을 비활성화하고 80포트 VirtualHost 설정을 몰아둔 기존의 설정파일에 세팅을 추가해보겠습니다.
blog.jimnongtest1.top 사이트에 SSL 적용하려고 하는데, 전달하기 쉽도록 해당 VirtualHost 설정 아래(붉은 네모)에 적어볼게요.
▲ 이런 식으로 구성을 추가하세요.
ServerName 부터 로그 설정까지는 80포트 VirtualHost 설정과 같게 유지하면 되고,
Let's Encrypt 인증서 경로는 파일관리자 프로그램을 루트 권한으로 실행시키면 파악할 수 있고,
SSLCipherSuite 값이 무척 긴데, https://blog.lael.be/post/73 에서 Ctrl+F 로 찾아서 복붙하면 편합니다.
▲ 저장하고 빠져나온 다음 아파치 서비스를 재시작해 줍니다.
▲ 웹브라우저에서 도메인 앞에 https:// 붙여서 접속 테스트해 보세요.
크롬에서 “안전함”이라고 딱~ 뜨네요. 세팅 성공.
※ 팁 1. HTTP에서 HTTPS로 Re-Direct 시키기
위의 웹브라우저 스샷을 보면 지금까지의 세팅으로는 http로 시작하는 주소로도 접근이 됨을 알 수 있습니다. https 연결을 추가한 것에 불과하지요.
하지만 http 주소로 들어오더라도 https 주소로 리다이렉트(옮겨가라고) 시키면 무조건 https:// 주소로 접근이 되겠죠?
멀티도메인/서브도메인 연결을 설명했던 이전 포스팅(링크)에서 팁으로 www-redirect 기능을 언급했었는데, 그것을 응용하면 됩니다.
▲ 80포트 VirtualHost 설정에서 Redirect 주소를 https:// 로 시작하게 적어주세요.
(스샷에는 빠졌지만 "https://www.도메인/" 처럼 도메인 뒤에 /를 붙이는 게 좋습니다.).
그리고 아파치 서비스 재시작하면 됩니다.
웹브라우저 주소 창에 "http://도메인" 형식으로 입력하면 "https://도메인" 형식으로 바뀌면서 접속될 거예요.
▲ "https://도메인" 처럼 쳤을 때 "https://www.도메인" 형식으로 전환되게끔 조치하는 것도 원리는 같습니다. 단, "https://도메인"으로의 접속도 보안 접속이니까 SSL 관련 설정들을 Redirect 앞에 적어줘야 한다는 것만 유의하면 되겠습니다.
(이번 스샷에도 빠졌지만 "https://www.도메인/" 처럼 도메인 뒤에 /를 붙이는 게 좋습니다.).
그리고 DNS 서버에서 www-redirect 프리셋 세팅한 경우 "https://도메인" 형식으로 입력시 "https://www.도메인" 형식으로 전환되지 않을 수 있습니다. DNS 서버의 www-redirect 프리셋 세팅을 해제하고 A레코드에 실제 IP를 적는 식으로 대처한 다음(TTL 갱신시간도 3600초 정도로 짧게 입력) 아파치 세팅에서 https://www 리다이렉트 처리하면 제대로 접속될 겁니다. 유동 IP라면 IP 바뀔 때마다 A레코드를 갱신해줘야 하는 불편함은 있으나, C네임 레코드에 DDNS 주소를 함께 적어놨다면 극단적인 접속 불가 상황은 피할 수 있을 겁니다.
[우분투 16.04] IP주소 바뀌면 이메일로 통보되게끔 구축 : 구글(Gmail) SMTP 활용
※ 팁 2. HSTS 적용
SSL Labs 사이트의 Server Test 카테고리( https://www.ssllabs.com/ssltest/ )에서 https 전환에 따른 보안등급을 측정해볼 수 있는데, 저는 HSTS 라는 것을 적용하기 전까지는 총점(Overall Rating)이 A나 A-에 머물더군요.
HSTS가 뭔지는 저도 자세하게 모르겠고(문송합니다ㅠㅠ), 라엘님 가이드(https://blog.lael.be/post/73)를 따라 적용해봤습니다. A+ 받을 수 있다고 해서;;;.
▲ 터미널 창에서 sudo a2enmod headers 라고 입력.
▲ SSL 설정이 담긴 사이트 정보 conf 파일(기본값 : /etc/apache2/sites-enabled/default-ssl.conf )에서 해당 사이트 정보가 담긴 <VirtualHost *:443> 영역에 위 스샷처럼
Header always set Strict-Transport-Security “max-age=31536000”
구문을 추가합니다. 그리고 저장+빠져나옴.
▲ 터미널 창에서 sudo service apache2 restart 라고 입력하여 아파치 서비스를 재시작한 다음
https://www.ssllabs.com/ssltest/ 에서 테스트를 다시 진행해봅니다.
▲ 감사하게도 A+가 떴습니다! HSTS 설정 끝.
HSTS 적용 중단이 필요한 때가 있는 것 같은데, 그때는 구글링 해보세요. 친절한 한글 설명이 많을 겁니다.
(구글 검색어 : hsts 해제, hsts 삭제 등)
※ 팁 3. HTTP/2 적용
https:// 연결이 전제되어야 적용할 수 있는 http/2. http/2로 접속하면 속도가 http/1.1보다 빠르다나?
왜 좋은지는 검색해보세요. 자세하게 나옵니다.
위 링크의 설명을 보면 아파치 2.4.26 버전부터 보안상 문제가 없다고 하니, 적용 전에 아파치 버전부터 확인하면 좋습니다.
▲ 터미널 창에서 apache2 -v 라고 치면 버전이 나옵니다. 우분투 18.04에서는 문제가 없겠네요.
sudo a2enmod http2 라고 쳐주시고요,
443포트 VirtualHost 정보 담긴 conf 파일(기본값 : /etc/apache2/sites-enabled/default-ssl.conf )을 루트 권한으로 열어서 편집을 시도합니다(sudo gedit /etc/apache2/sites-enabled/default-ssl.conf ).
▲ <VirtualHost *:443> 아래, ServerName 위에
Protocols h2 http/1.1
이라고 적고 저장+빠져나옵니다.
▲ 아파치 서비스 재시작해 주시고요,
▲ 크롬을 실행시키고 F12를 누르면 개발자도구가 실행될 겁니다. Network 탭을 클릭했을 때 아래에 Protocol 카테고리가 나오는지 보시고, 없으면 Name / Status / Type ... 카테고리 영역에서 마우스 우클릭하여 추가하세요.
그리고 주소창에 도메인을 입력해보세요. 이동현황이 기록될 때 Protocol에 h2라고 (하나라도) 뜨면 설정이 된 것이고, 전부 http/1.1 이라고 뜨면 설정 실패한 것이니 conf 파일을 손보세요.
아파치(Apache 2.4) http/2 세팅 설명도 끝.
4. 발급받은 인증서의 갱신(기간 도래시)과 갱신 자동화
재발급은 리밋 한도 내에서 (발급 절차와 동일한 방법으로) 언제든지 가능하니까 언급하지 않겠습니다.
기간이 도래하는 인증서는 갱신 절차를 밟으면 되는데,
▲ /etc/letsencrypt/renewal/ 디렉토리에 갱신 설정파일이 있는 사이트들만 갱신이 되는 것 같습니다.
설정 파일을 열어보니까 만료 30일 이전부터 갱신이 가능한 것 같고요.
▲ 터미널 창에서 sudo letsencrypt certificates 라고 치면 인증서들의 유효기간이 나옵니다.
▲ sudo letsencrypt renew --dry-run 이라고 쳐서 테스트했더니 통과는 하더군요.
▲ --dry-run 옵션 빼고 실제로 진행해보니 아직 때가 아니라고;;;
그래서 이번 글은 일단 공개하고, 인증서 만료 기간이 되면 아래에 보충하겠습니다!
------------------------------------------------------
2018. 09. 23. 인증서 자동 갱신 등록 과정 추가.
https://blog.lael.be/post/5107 글을 보고 따라했습니다.
터미널 창을 띄우고(Ctrl+Alt+T), sudo crontab -e 라고 입력합니다.
(root 권한의 crontab에 등록하려고 sudo를 앞에 붙인 겁니다. sudo gedit /var/spool/cron/crontabs/root 처럼 입력해도 됩니다. /var/spool/cron/crontabs/ 경로에 우분투 계정 이름으로 계정별 crontab 파일이 있거든요.)
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
▲ 참고로 기본 에디터는 nono일 거고, select-editor 명령어를 통해 바꿀 수 있습니다.
▲ 저는 제일 아랫줄에 붉은 네모로 표시한 것처럼 입력하고 Ctrl+X 를 눌러 저장+빠져나왔는데요,
10 4 */15 * * /usr/bin/letsencrypt renew >> /var/log/letsencrypt/letsencrypt-renew.log
15 4 */15 * * /usr/sbin/service apache2 restart
크론탭은
* * * * * 수행할 명령어
이런 형식으로 구성하면 되는데, * * * * * 의 각 자릿값은 "분(0~59) / 시(0~23) / 일(1~31) / 월(1~12) / 요일(0~6) (0:일요일, 1:월요일, 2:화요일, …, 6:토요일)" 을 뜻합니다.
입력한 명령어들을 해석해보면
15일에 한번씩(*/15 - 31일인 달은 1일, 16일, 31일 / 30일인 달은 1일, 16일) 새벽 4시 10분에 letsencrypt renew 명령을 실행하고, letsencrypt-renew.log 기록을 /var/log/letsencrypt/ 경로에 남겨라.
15일에 한번씩(*/15) 새벽 4시 15분에 아파치 서비스를 재시작하라.
이렇습니다. 갱신한 인증서는 아파치를 재시작해야 반영되거든요.
(31일과 다음 달 1일 간의 차이가 너무 짧아서 한 달에 두 번(1일, 16일)으로 날짜를 정해서 실행하고 싶다면 " 10 4 1,16 * * " 이런 식으로 구성하면 됩니다.)
▲ 갱신 로그 파일을 확인해봤는데, 정상적으로 처리된 것 같고,
▲ 인증서 유효기간을 확인해봤는데... 잘 된 것 같죠?
자동 갱신 관련 설명은 이것으로 끝입니다.
리눅스에 익숙치 않아서 Crontab 구성이 어렵게 느껴지면 https://crontab.guru/ 사이트에서 GUI로 극복해보시고요,
터미널 창에서 sudo crontab -l 이라고 입력하면 루트 계정의 크론탭 작업목록을 확인할 수 있고, "sudo crontab -l -u 계정명" 처럼 입력하면 우분투 계정별 크론탭 작업목록을 확인할 수 있습니다. 참고하세요.
[우분투 18.04 데스크톱] LAMP : 아파치(Apache), PHP, MariaDB 삭제(제거)
[우분투 18.04 데스크톱] LEMP : 엔진엑스(Nginx) 설치 과정 정리
[우분투 18.04 데스크톱] LEMP : Let's Encrypt SSL 인증서 수동 발급과 엔진엑스(Nginx)에 적용하기
'도움이 되는 Tip > 리눅스&워드프레스' 카테고리의 다른 글
[우분투 18.04 데스크톱] LAMP : PHP 7.2 설치과정 정리 (3) | 2018.07.28 |
---|---|
[우분투 18.04 데스크톱] LAMP : 아파치(Apache) VirtualHost로 멀티도메인(서브도메인)을 한 서버에 연결하기 (3) | 2018.07.06 |
[우분투 18.04 데스크톱] LAMP : 아파치(Apache) 설치과정 정리 (0) | 2018.06.04 |