안녕하세요 트러블슈터입니다.

오늘 다뤄볼 주제는 우분투 환경에서 무료 SSL 설치 및 XE, 라이믹스 플랫폼에서 오류가 발생하지 않도록 설정하는 방법을 알아보겠습니다.

 

단 10분이면 간단하게 해결할 수 있으니 두려워 마시고 저만 믿고 따라오시면 됩니다.! 

제가 직접 테스트해가며 오류가 발생하는 지점까지 확인 완료하였으니 해당 오류에 대한 해결 방법까지 같이 말씀드리도록 하겠습니다.

 

실제 테스트 환경은 아래와 같으며, 우분투 버전의 경우 16.04 버전 이상부터는 모두 적용 가능합니다.

 

테스트 구성 환경

운영체제 : Ubuntu

버전 : 18.04 (16.04 버전 이상부터 모두 적용 가능)

웹 빌더 : XE (라이믹스) 

SSL : Lets Encrypt (100% 무료)


무료 인증서 등록 방법(Lets Encrypt)

무료 인증서 등록을 시작하기 전에, Let's Encrypt는 무료 TLS 인증서 발급을 지원하는 비영리기관입니다. 
Root 도메인, 특정 서브 도메인을 포함하여 하나의 인증서로 모든 서브 도메인에 사용 가능한 *.test.com 형태의 와일드카드 서브 도메인 인증서도 무료로 발급하여 그 활용도가 꽤 넓습니다.

 

이상하게 무료임에도 불구하고 시장에서는 인지도와 사용되는 곳이 그렇게 많이 보이지 않는데, 가격 경쟁력으로 보아 점점 많은 곳에서 사용될 것으로 예상되는 추세라고 합니다.

 

무료라서 보안 수준도 낮은 것이 아니냐고 하실 수 있을 것 같은데, 전혀 그렇지 않습니다. 제가 테스트해본 바로는 설정만 잘해준다면 보안 최상위 등급인 A+ 등급으로 적용이 가능했으니까요. 해당 부분은 저만 믿고 쭉 따라오시면 한 푼 안 들이고 홈페이지에 강력한 보안 기능을 적용하실 수 있게 해 드리겠습니다.

득이 있으면 불편한 점도 있는 법이라고, Let's Encrypt의 단 하나의 단점이 있습니다. 발급된 인증서는 유효기간이 90일이고, 만료 30일 전부터 갱신할 수 있다는 특징이 있습니다.

 

하지만, 갱신 가능 횟수가 무제한인 점을 이용하여 해당 불편한 부분도 굳이 매번 갱신해주지 않아도 자동으로 갱신해주게끔 설정하는 방법도 알려드리겠습니다. 그야말로 한 번만 설정해두면 웬만하면 다신 볼 일 없으실 겁니다.

 

1. 인증서 발급 프로그램 letsencrypt 설치 (apt-get 이용)

# apt-get install letsencrypt

위 명령어를 실행하여 letsencrypt를 설치합니다.

 

 

2. 인증서 적용 예정 서버 접속 가능 여부 점검

인증서를 적용할 자신의 서버가 접속 가능하여야 합니다.

 

HTTP 서버에 신규 TLS를 발급하는 경우
- HTTP 상태에서 사이트 접속이 가능하다면 다음 단계로 이동
HTTPS 서버에 TLS를 교체하는 경우
- 현재 사용 중인 TLS 유지 필요, 사이트 접속이 가능하다면 다음 단계로 이동
   (인증서를 새로 발급받은 후 교체 예정)

 

3. 인증서 발급 프로그램 실행

# letsencrypt certonly --webroot --webroot-path=[서버 설치 디렉터리]-d [도메인] -d [www.도메인]
ex) 
letsencrypt certonly --webroot --webroot-path=/var/www/html -d test.com -d www.test.com

위 명령어 실행 시 www.test.com 도메인과 test.com에서의 인증서 발급이 진행되게 되는데, 이때 이메일 주소를 물어볼 수 있습니다. 인증서 갱신 등의 정보를 받기 위한 메일 주소 이므로, 여러분들이 사용하시는 네이버 지메일 등등의 메일 주소를 입력하시면 발급이 완료됩니다.

 

※ 꼭 certonly 옵션을 추가하셔야 합니다. 해당 옵션은 인증서에 관련된 부분만 관여하겠다는 의미로, 원치 않는 서버 설정 변경 등을 막을 수 있습니다.

 

인증서 발급이 완료되면, /etc/letsencrypt/live/[도메인]/ 에서 해당 파일이 생성된 것을 확인할 수 있습니다.

 

혹여나 위 방법에서 오류가 발생하여 진행이 되지 않는다면, 아래와 같이 해결합니다.

# vi /etc/apache2/apache2.conf

<FilesMatch "^\.ht"> ~~ 이후 부분에 커서를 두고 i 버튼을 눌러 아래 문자를 붙여넣기 합니다. 해당 문자가 이미 있을 경우 아래 문자와 비교하여 잘못된 부분은 없는지 확인합니다.

#붙여 넣기 할 문자

# deny file, folder start with dot
<DirectoryMatch "^\.|\/\.">
    Require all denied
</DirectoryMatch>
  
# deny (log file, binary, certificate, shell script, sql dump file) access.
<FilesMatch "\.(?i:log|binary|pem|enc|crt|conf|cnf|sql|sh|key|yml|lock|gitignore)$">
    Require all denied
</FilesMatch>
  
# deny access.
<FilesMatch "(?i:composer\.json|contributing\.md|license\.txt|readme\.rst|readme\.md|readme\.txt|copyright|artisan|gulpfile\.js|package\.json|phpunit\.xml|access_log|error_log|gruntfile\.js|bower\.json|changelog\.md|console|legalnotice|license|security\.md|privacy\.md)$">
    Require all denied
</FilesMatch>
 
# Allow Lets Encrypt Domain Validation Program
<DirectoryMatch "\.well-known/acme-challenge/">
    Require all granted
</DirectoryMatch>

 

 

문자 붙여넣기 후 esc 버튼을 누르고 :wq를 입력하여 변경 내용을 저장합니다.

위 과정을 거친 후에 letsencrypt certonly --webroot --webroot-path=/var/www/html -d test.com -d www.test.com 등의 인증서 발급 프로그램 명령어를 실행하시면 정상적으로 인증서 발급이 가능한 것을 확인하실 수 있습니다.

 

 

4. 인증서 자동갱신 설정

# crontab -e

위 명령어를 입력 시 에디터 번호 선택 문구가 출력된다면 3번을 선택 후 엔터를 눌러줍니다.

 

crontab -e 명령어 실행 시 나타나는 에디터 창에서 자신이 원하는 부분에 위 형식과 같은 부분을 추가해줍니다. renew 부분은 인증서 갱신 부분이며, reload 부분은 아파치 설정 변경 값을 불러오겠다는 의미입니다. (위 설정은 매주 월요일 1시 10분 경에 자동으로 수행하는 옵션)

 

자동 실행 날짜를 지정하고 싶은 경우 아래를 참고하여 지정할 수 있습니다.

*              *                *             *               *  
분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)

순서대로 분-시간-일-월-요일 순이며, 요일에서 0과 7은 일요일입니다. 1(월요일) ~ 6(토요일)입니다.

 

위 과정을 다 마치셨다면...

 

인증서 발급 부분이 가장 까다로운 부분인데, 잘 해결하셨습니다. 축하드립니다!

다음 포스팅은 발급받은 인증서를 서버에 적용하는 방법을 알아보도록 하겠습니다.