Skip to content

letsencrypt

Been Kyung-yoon edited this page Jul 15, 2019 · 6 revisions

Let's Encrypt - 무료 SSL 인증서 발급 안내

무료 SSL 인증서 발급을 쉽게 하기 위해 다음 기능들을 지원합니다.

  • Let's Encrypt 인증툴 certbot-auto 설치
  • 인증서 발급전 사전 테스트후 발급이 가능한 경우만 인증 시도(잘못된 인증 시도로 인한 IP 차단 등 예방)
  • nginx SSL 설정 자동 추가 지원
  • SSL 설정 보안 수준 선택 가능 (하단 데모를 통해 보안 수준별 SSL 평가 사이트 점수도 확인 가능)
  • 인증서 자동 갱신 크론 지원 (크론 실행 결과 로그 기록)

준비 - stack 신규 사용자

  • ./install.sh 를 실행하면 Let's Encrypt tools이 기본 설치에 포함되어 있습니다.

  • 설치 완료후 stack.conf 파일을 열어, LETSENCRYPT_EMAIL= 변수에 이메일을 입력합니다.

# Let's Encrypt 인증서 설치시 사용할 이메일 주소. (연장 안내 등 메일 수신 동의됨)
LETSENCRYPT_EMAIL=

준비 - stack 기존 사용자(v0.9.12 이하 사용자들)

  • ./self-update.sh 를 실행하여 stack 을 최신 버전으로 업데이트합니다.
  • stack.conf 파일의 NGINX= 다음 라인에 다음 변수를 추가하고, 이메일을 입력합니다.
# Let's Encrypt 자동화툴 설치 여부
LETSENCRYPT=1

# Let's Encrypt 인증서 설치시 사용할 이메일 주소. (연장 안내 등 메일 수신 동의됨)
LETSENCRYPT_EMAIL=
  • ./install.sh 를 실행하여 설치를 진행하면 됩니다. (이미 설치된 PHP/mariadb/nginx 등은 중복 설치되거나 기존 설정을 건드리지 않습니다.)

SSL 인증서 발급 - 신규 사이트

  • ./app-install.sh 에서 --ssl 옵션만 추가하면, 사이트 추가와 함께 SSL 인증서까지 발급 완료됩니다.
Example:
  ./app-install.sh --user=phpmyadmin --domain=phpmyadmin.php79.net --app=phpmyadmin --php=71 --ssl

  --ssl       (선택) Let's Encrypt 자동화툴을 사용해서, SSL 인증서 발급을 함께 진행합니다.
                주의) 인증서를 발급 받은 도메인의 IP가 현재 서버로 지정되어 있어야 인증서 발급이 가능합니다.
                      앱 설치가 완료된 마지막 단계에서 발급을 시도하므로, 발급 실패시에도 앱 사용에는 문제없습니다.
                      앱 설치후에도 ssl-install.sh 명령을 통해 별도 발급 가능합니다.

SSL 인증서 발급 - 기존 사이트

  • ./ssl-install.sh 명령으로 이미 만들어진 기존 사이트에 SSL 인증서 발급 및 nginx SSL 설정을 추가할 수 있습니다.
### Let's Encrypt SSL 인증서 발급 순서는 다음과 같습니다. ###

  1. nginx 사이트 설정에 Let's Encrypt 인증용 디렉토리 접근 추가
  2. certbot-auto 로 SSL 인증서 발급 테스트후, 실제 인증서 발급      주의) 인증서를 발급 받은 도메인의 IP가 현재 서버로 지정되어 있어야 인증서 발급이 가능합니다.
  3. nginx 사이트 설정 마지막에 SSL 설정 추가

Example:
  ./ssl-install.sh --user=php79 --domain=php79.net
  ./ssl-install.sh --user=phpmyadmin --domain=phpmyadmin.php79.net
  ./ssl-install.sh --user=wordpress --domain=wordpress.php79.net

Usage:
  --user      아이디(/etc/nginx/conf.d/아이디.conf).  ./user-add.sh 로 추가한 아이디를 입력하세요.

  --domain    도메인.  SSL 인증서 발급시 사용할 도메인으로 www. 없이 입력하세요.
                Tip) 발급시 www. 를 자동 추가하여 php79.net, www.php79.net 형태의 2개 도메인을 지원합니다.

  --skip-nginx       (선택) nginx 설정을 생략하고, certbot-auto 로 SSL 인증서 발급만 진행합니다.
                Tip) 이미 nginx 설정이 완료된 상태이거나, 직접 수동 설정하실 경우에 사용하세요.

인증서 자동 갱신

Let's Encrypt 무료 SSL 인증서는 발급일로부터 90일간 유효합니다.

크론 데몬에 자동 갱신툴을 등록해두었으므로, 90일 초과전에 자동 갱신됩니다.

  • 수동 실행 및 결과 확인 방법은 다음과 같습니다.
# 인증서 갱신 수동 실행
/etc/cron.daily/php79-certbot-auto-renew

# 인증서 갱신 결과 로그 보기
grep php79 /var/log/messages|tail
  Jun 14 11:58:05 localhost php79-stack: certbot-auto-renew-cron.sh succeeded.
  • 인증서 발급 목록 확인
certbot-auto certificates

  Certificate Name: ssl-legacy.php79.net
    Domains: ssl-legacy.php79.net www.ssl-legacy.php79.net
    Expiry Date: 2019-09-12 10:41:09+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/ssl-legacy.php79.net/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/ssl-legacy.php79.net/privkey.pem
  Certificate Name: ssl-modern.php79.net
    Domains: ssl-modern.php79.net www.ssl-modern.php79.net
    Expiry Date: 2019-09-12 11:01:13+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/ssl-modern.php79.net/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/ssl-modern.php79.net/privkey.pem
  Certificate Name: ssl-stable.php79.net
    Domains: ssl-stable.php79.net www.ssl-stable.php79.net
    Expiry Date: 2019-09-12 10:48:29+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/ssl-stable.php79.net/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/ssl-stable.php79.net/privkey.pem

https 자동 안내

  • http 주소로 접속시 https 로 자동 이동 됩니다. 이 기능을 사용하지 않으려면 nginx 설정에서 다음 항목을 주석처리(#)하면 됩니다.
vi /etc/nginx/conf.d/ssl-stable.conf

    # Force https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }

SSL 보안 수준 변경

SSL 보안 수준은 Mozilla SSL Configuration Generator 의 3가지 옵션을 사용하였습니다.

stable - 기본값(권장)

데모 - https://ssl-stable.php79.net/

legacy - WindowX XP IE6, Java 6 등 하위 호환성 필요시 선택

데모 - https://ssl-legacy.php79.net/

stable -> legacy 변경 방법

  • nginx 설정에서 include 파일명만 변경해주면 됩니다.
vi /etc/nginx/conf.d/ssl-stable.conf

  #include /etc/letsencrypt/php79/ssl-stable.conf;
  include /etc/letsencrypt/php79/ssl-legacy.conf;

modern - 최신 기기만 지원

데모 - https://ssl-modern.php79.net/

문제 해결

You can’t perform that action at this time.