현재의 웹 페이지는 HTTP 가 아닌 HTTPS 의 강화된 보안이 적용되는 것을 권장하고 있습니다. 사실 단순히 정적인 정보들 만을 제공하는 웹 페이지라면, HTTPS 가 꼭 필요하지 않을 수도 있지만, 대다수의 브라우저들은 HTTPS 가 적용되지 않은 웹 페이지에 대해서는 접근의 제한을 점차 강화해나가고 있는 추세이므로 사실상 필수라고 봐도 과언이 아닙니다.
이번 포스트 에서는 위와 같이 웹 페이지 접근시 ‘사이트 연결이 안전하지 않음’ 또는 관련 인증 오류 발생했을 때, 웹 서버에 무료로 SSL 인증서인 Let’s Encrypt 를 설치 하고 발급 받는 방법을 알아보겠습니다.
– 웹 서버의 적용 조건 및 환경 정보
1) 웹 도메인 접근 가능해야 함 (인터넷에 연결되어 있어야 함)
2) 예제 사용 환경
> 기본 서버 환경 : Google Cloud Platform 의 Compute 인스턴스 VM
> 운영체제 (OS) : Debian GNU/Linux 9 (커널버전 : 4.9.189)
> 미들웨어 : Apache/2.4.41 (Unix)
> 웹 어플리케이션 : Bitnami WordPress 5.3.2-2
– Let’s Encrypt 란? (https://letsencrypt.org/ko/)
일반적인 TLS (Transport Layer Security : SSL(Secure Sockets Layer)에 기반한 기술로, 국제 인터넷 표준화 기구에서 표준으로 인정받은 인터넷에서의 정보를 암호화 해서 송수신하는 프로토콜) 인증서 들은 유료로 1년 마다 갱신을 해주어야 하므로 비용과 노력이 들어갑니다. 그러나 Let’s Encrypt 는 모질라 재단, 페이스북, 구글 등의 많은 기관들의 스폰서로 자동화된 TLS 를 무료로 발급해주고 있습니다.
1. 인증서 다운로드 및 설치
먼저 root 권한으로 들어갑니다. (** GCP (Googld Cloud Platform 의 Linux 를 사용하는 경우, root 계정의 기본 패스워드가 적용되어 있지 않으므로 먼저 root 계정의 기본 패스워드를 적용해주어야 합니다.)
최상위 폴더의 바로 아래에 있는 tmp 폴더로 이동합니다| cd tmp
다음과 같은 명령어로 ‘certbot-auto’ 파일을 다운받습니다.| wget https://dl.eff.org/certbot-auto
워드프레스의 루트 폴더로 가서 ‘.well-known’ 폴더를 만들어 줍니다.| mkdir /.well-known
위에서 만든 ‘.well-known’ 폴더 아래에 ”.htaccess’ 파일을 만들어 줍니다.| touch /.well-known/.htaccess
다음과 같이 ‘.well-known’ 폴더 아래에 생성한 ‘.htaccess’ 파일을 편집기로 열어줍니다.
| sudo nano /.well-known/.htaccess
파일을 연 다음 다음과 같이 작성해 줍니다.| #
| # Override overly protective .htaccess in webroot
| #
| RewriteEngine On
| Satisfy Any
입력이 완료 되었다면, ESC 키를 누른 후 다음 명령어를 입력하여 저장하고 나갑니다. (또는 Mac OS 기준, Ctrl + O -> 엔터 (이름 그대로 저장) 하여 수정된 문서를 저장하고 나갑니다.) | :wq
다음은 위에서 다운로드 했던 ‘certbot-auto’ 파일을 실행 및 도메인 등록을 진행해야 합니다. 아래의 명령어 예제와 같이 뒷 부분에는 등록을 필요로 하는 웹 페이지의 주소들을 앞에 ‘-d’ 를 포함하여 모두 입력해 주어야 합니다.(예제) | ./certbot-auto certonly --webroot -w /워드프레스 폴더 경로/ -d 도메인주소.co.kr -d www.도메인주소.co.kr
따라서 본 블로그의 홈페이지 주소인 ‘www.stevenjlee.net’ 을 예를 들어 보면 다음과 같이 작성해야 합니다.(예제) | ./certbot-auto certonly --webroot -w /home/bitnami/apps/wordpress/htdocs/ -d stevenjlee.net -d www.stevenjlee.net
실행을 하게 되면 다음과 같은 화면이 나타나며, 안내된 것과 같이 이메일 입력 후 ‘A’, ‘N’ 을 입력합니다. (마지막을 ‘Y’ 로 입력하면 Let’s Encrypt 재단에서 보내주는 메일을 구독하겠다는 의미입니다.)
다음은 보안 키 파일을 연동해야 합니다. 아래와 같이 ‘conf’ 파일을 찾아 열어 줍니다. (** 본 예제에서는 bitnami WordPress 를 설치한 경로로 접근합니다. bitnami WordPress 가 아닌 경우, SSLCertificateFile 과 SSLCertificateKeyFile 이 작성되어 있는 ‘conf’ 파일을 찾아 편집기로 열면 됩니다.)(예제) | sudo nano /(Apache 설치 경로)/conf/bitnami/bitnami.conf
| sudo nano /opt/bitnami/apache2/conf/bitnami/bitnami.conf
‘conf’ 파일에서 기존 키파일의 명령들을 주석처리 (‘#’ 을 앞에 추가) 하여 무효화 시켜줍니다.| # SSLCertificateFile "/opt/bitnami/apache2/conf/server.crt"
| # SSLCertificateKeyFile "/opt/bitnami/apache2/conf/server.key"
한 칸 띄워서 바로 아래에는 다음과 같은 새로운 키의 경로를 입력해 줍니다. ‘도메인주소’ 라고 표기된 부분은 위에서 실행한 ‘./certbot-auto’ 명령어에 기입 했던 도메인주소와 동일해야 합니다.| # Let's Encrypt
| SSLCertificateFile "/etc/letsencrypt/live/도메인주소.co.kr/fullchain.pem"
| SSLCertificateKeyFile "/etc/letsencrypt/live/도메인주소.co.kr/privkey.pem"
| SSLCACertificateFile "/etc/letsencrypt/live/도메인주소.co.kr/fullchain.pem"
입력이 완료 되었다면, ESC 키를 누른 후 다음 명령어를 입력하여 저장하고 나갑니다. (또는 Mac OS 기준, Ctrl + O -> 엔터 (이름 그대로 저장) 하여 수정된 문서를 저장하고 나갑니다.)| :wq
그 다음 Apache 를 재부팅 시켜 줍니다.| sudo /opt/bitnami/ctlscript.sh restart apache
다시 웹 페이지를 접속해 보면 SSL (HTTPS) 가 정상적으로 적용된 페이지로 접근이 가능함을 확인 할 수 있습니다.
2. 인증서 수동 갱신하기
기본적으로 Let’s Encrypt 인증서는 3개월 마다 갱신 해주어야 합니다. 갱신은 위에서 다운로드 한 ‘certbot-auto’ 파일을 다운로드 했던 경로를 들어가서 다음과 같은 명령어를 입력하면 갱신이 완료 됩니다.| ./certbot-auto renew
참고로 아래와 같이 인증서의 만료 기간을 확인할 수도 있습니다.| ./certbot-auto certificates
3. 인증서 자동 갱신하기
인증서를 수동으로 갱신 해도 되지만, 3개월 마다 직접 갱신 해주어야 하는 작업이 귀찮다면 아래와 같은 자동 갱신 설정을 하여 인증서가 자동 갱신 되도록 할 수도 있습니다. 다만, Let’s Encrypt 에서 배포한 ‘certbot-auto’ 파일 에서는 자동 갱신을 해주는 기능이 없으므로 리눅스의 크론탭 (Crontab) 이라는 스케줄 관리 기능을 통해 다음과 같이 작성한 명령어를 특정 시점에 자동 실행해주는 설정을 합니다.
먼저 루트 권한으로 진입합니다.| su - root
다음 명령어와 같이 크론탭을 실행합니다.| sudo crontab -e
위와 같이 편집기 툴을 선택하라는 창이 뜨는데, 저는 ‘nano’ 편집기를 선택하겠습니다. (1번)
이 후 크론탭 내에서 가장 마지막 줄에 아래와 같이 명령어를 작성해 줍니다.| 0 1 1 * * /root/tmp/certbot-auto renew "sudo /opt/bitnami/ctrlscript.sh restart apache"
참고로 위 명령어의 가장 앞 부분은 순서대로 ‘분, 시, 일, 월, 요일’ 이며 위와 같이 ‘0 1 1 * *’ 의 의미는 매월 1일 오전 1시 0분 마다 해당 명령어 (tmp 폴더에 위치한 certbot-auto renew 및 Apache 서버 재시작) 를 실행한다는 의미 입니다.
입력이 완료 되었다면, ESC 키를 누른 후 다음 명령어를 입력하여 저장하고 나갑니다. (또는 Mac OS 기준, Ctrl + O -> 엔터 (이름 그대로 저장) 하여 수정된 문서를 저장하고 나갑니다.)| :wq
#Steven