Ubuntu Apache, Let’s Encrypt 를 사용한 SSL 인증.

이 분야에 대해선 아주 적은 지식만 가지고 있기에, 그냥 다른 사람이 만들어놓은 문서를 따라하는데 그쳤다. 뭔가 다른 방법이 있을 듯도 하긴 한데..

일단, 다음 두 문서를 참고했다. (사실 첫문서를 그대로 따라했고, 두번째 문서는 그야말로 참고만 했다.)

How To Secure Apache with Let’s Encrypt on Ubuntu 18.04

** 몰랐던 사실인데, 이렇게 글을 쓰고 있는 상황에서는 크롬브라우저의 보안표시가 자물쇠에서 정보(동그라미 안에 i 자 표시)로 바뀐다. 즉, 글 작성동안엔 안정성을 보장할 수 없다는 뜻이 되나보다.

이거.. WordPress 에서 설정을 잘못해줘서 이랬다. 제대로 하고 나니 저런 현상은 없어졌다.


Digital Ocean 문서에서는, domain 과, www.domain 에 모두 A 레코드가 할당되어 있어야 한다고 했지만, 내 경우 www.domain, 즉 www.nemonein.xyz 에만 할당되어 있었음에도 문제가 없었다.

Let’s Encrypt비영리 인증서 발행기관이라는데, 이번에 처음 알게됐다. 이 조직이 어떤 의미가 있는지, 어느 정도 힘이 있는지는 차차 알게 될테고..
어떻게 해서 암호화가 진행되는지는 홈페이지에 자세히 나와있으니, 추후에 내용을 정리해보기로 한다.

어쨌든, 여기를 이용하려면 몇가지 준비동작이 필요하다.

PPA 추가

우분투/데비안에는 기본으로 해당 프로그램(Certbot)이 지원되고 있지만, 보안관련일수록 최신판이 중요하므로, PPA 를 통해 설치하는게 좋다.

sudo add-apt-repository ppa:certbot/certbot
sudo apt install python-certbot-apache

아파치 설정

아파치 사이트 설정파일(/etc/apache2/sites-available/your_domain.conf)을 열고, ServerName 항목을 적절히 수정한다.

...
ServerName www.nemonein.xyz;
...

설정이 끝난 뒤, 문제가 없는지 시험해본다. 문제가 없다면 아파치를 재시동(reload)한다.

sudo apache2ctl configtest
sudo systemctl reload apache2

방화벽 설정

AWS Lightsail 용 우분투에서는, ufw 는 불필요하고, Lightsail 설정에서 443 번을 열어준다.

SSL 인증 취득

다음 명령으로 Let’s Encrypt 를 통해 SSL 인증서를 얻을 수 있다.

sudo certbot --apache -d www.nemonein.xyz

첫 경험(?)일때는 이메일 주소를 입력하라고 나온다. 넣어주고, 질문에 적절히 대답하면 된다.

문제가 되는 부분은 맨 마지막인데..

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

여기서 뭘 해야할지 잘 몰라서, 일단은 2 를 택했다.
그랬더니, conf 파일에 다음과 같은 내용이 추가가 되었다.

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.nemonein.xyz
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

그리고, 자동으로(아마도??), /etc/apache2/sites-available/your_domain-le-ssl.conf 가 생성됐고, site available 도 완료됐다. (물론, 이 파일엔 443 포트가 설정돼 있다.)

이 글 처음에 인용한 두 개 글 중, 한국어로 된 글에서는, 이 부분을 수동으로 편집해야만 했고, Rewrite 은 사용하지 않았다.
어떤 방식이 더 좋은지는 (아직은) 알 수가 없다.

SSL 인증서 확인

인증서가 잘 적용되었는지 확인하려면, 웹브라우저로 해당 사이트에 접속한 뒤, 주소창에서 자물쇠 모양 아이콘을 클릭하고 ‘인증서’를 보면 된다.

자동 인증 갱신(Cron)

이 인증서는 90일, 즉 오늘(19-10-21) 발행된 인증서는 2020-01-19 까지만 유효하다.
certbot 은, 매일 2회씩 자동으로 인증서를 갱신하는 작업을 하도록 cron 을 설정해준다.

/etc/cron.d/certbot 에 해당 내용이 지정되어 있다.

갱신작업이 잘되는지는 다음 명령으로 확인이 가능하다.

sudo certbot renew --dry-run

** 갱신은 만료 2주전부터 가능하다고 한다. 이메일로 연락이 온다는데, 아직 받아보질 못해서 모르겠다. (*** 이메일로 연락은 안오는 듯 하다. 스팸으로 빠졌으려나?)


생각보다 굉장히 간단한데..?

안녕하세요. 글 남겨주셔서 고맙습니다.