ssl 적용- webroot방식(with apache)

ssl 적용- webroot방식(with apache)

webroot방식이란

  1. Standalone 방식

    이 방법은 Certbot이 간이 웹 서버를 돌려 도메인 인증 요청을 처리하는 방식입니다.하지만 인증용 간이 서버가 80, 443번 포트를 사용하기 때문에 운영 중인 서버가 해당 포트를 쓰게 된다면, 발급 또는 갱신 시 마다 잠시 서버를 내려야 하는 문제가 있습니다.물론 해당 포트를 사용하지 않는다면 이 방법을 사용하셔도 무방합니다.

  2. Webroot 방식

    이 방법은 도메인 인증을 위해 외부에서 접근 가능한 경로를 제공하고, Let’s Encrypt 측에서 해당 경로로 접속해 인증을 하는 방식입니다.이 방식을 사용할 경우 1번 방식의 서비스 종료는 하지 않아도 됩니다.

서버를 내려야 하는 문제를 해결하기 위해 Webroot방식을 적용 시키려고 한다.

환경

OS : CentOS7

WebServer : Apache

사용법

  1. /var/www/html 에 사용할 VirtualHost 폴더와 그안에 html파일을 넣어준다 (예제는 test.com)

예제처럼 도메인에 맞춰 폴더를 만들어주면 좋을듯

$ mkdir /var/www/html/test 

$ nano /var/www/html/test/index.html
  1. /etc/httpd/conf.d 에 test.conf파일을 만들어 준다.

www. 같은 도메인은 ServerAlias 을 이용해 추가

RewriteCond %{SERVER_NAME} =www.test [OR] 을 이용해 https로 rewrite

1
2
3
4
5
6
7
8
9
10
11
12
<VirtualHost *:80>
ServerName test.com
ServerAlias www.test.com
DocumentRoot /var/www/html/test
CustomLog /var/log/httpd/access.log common
ErrorLog /var/log/httpd/error.log
RewriteEngine on
RewriteRule ^/.well-known/ - [L]
RewriteCond %{SERVER_NAME} =www.test.com [OR]
RewriteCond %{SERVER_NAME} =test.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
  1. Certbot 설치

https://certbot.eff.org/ 홈페이지에서 각자 맞는 환경 선택

여기선 centos에 apache로 진행

$ yum install certbot python-certbot-apache
  1. centos에 명령어를 입력해준다.

test.com 뿐만아니라 www.test.com도 인증서를 적용시키기 위해 다음과 같은 옵션 추가

-d test.com -d www.test.com

$ certbot --webroot --installer apache -w /var/www/html/test -d test.com -d www.test.com
  1. /etc/httpd/conf.d에 gajah.tours-le-ssl.conf 파일이 생성됨 내용은

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <IfModule mod_ssl.c>
    <VirtualHost *:443>
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/html/test
    CustomLog /var/log/httpd/access.log common
    ErrorLog /var/log/httpd/error.log
    RewriteEngine on
    RewriteRule ^/.well-known/ - [L]
    # Some rewrite rules in this file were disabled on your HTTPS site,
    # because they have the potential to create redirection loops.

    # RewriteCond %{SERVER_NAME} =www.test.com [OR]
    # RewriteCond %{SERVER_NAME} =test.com
    # RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/test/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/test/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/test/chain.pem
    </VirtualHost>
    </IfModule>
  2. apache 재시작

    $ systemctl restart httpd

  3. TEST

test.com 나 www.test.com 로 접속해본다

https://test.com 로 rewrite되고 정상적으로 인증이 되는지 확인

  1. Renew certificate with cron

Let’s Encrypt SSL인증서는 90일마다 갱신해줘야 한다.

$ /opt/certbot/certbot-auto renew --dry-run
or
$ certbot renew --dry-run

—dry-run 옵션을 이용하여 잘동작하는지 확인할 수 있다.

갱신하는 방법은 한줄로 가능하지만 크론탭을 이용하여 자동적으로 갱신되도록 하는게 좋다.

크론탭을 수정하려면 -e옵션을 사용하고 작성된 크론탭을 보려면 -l옵션을 이용한다

$ crontab -e

0 18 1 */1 * /opt/certbot/certbot-auto renew --dry-run

$ crontab -l

매달 1일 18시에 갱신을 하는 크론탭을 작성하고 -l 옵션을 이용해 확인한다.