-
Notifications
You must be signed in to change notification settings - Fork 31
letsencrypt
Been Kyung-yoon edited this page Jul 15, 2019
·
6 revisions
무료 SSL 인증서 발급을 쉽게 하기 위해 다음 기능들을 지원합니다.
- Let's Encrypt 인증툴 certbot-auto 설치
- 인증서 발급전 사전 테스트후 발급이 가능한 경우만 인증 시도(잘못된 인증 시도로 인한 IP 차단 등 예방)
- nginx SSL 설정 자동 추가 지원
- SSL 설정 보안 수준 선택 가능 (하단 데모를 통해 보안 수준별 SSL 평가 사이트 점수도 확인 가능)
- 인증서 자동 갱신 크론 지원 (크론 실행 결과 로그 기록)
-
./install.sh
를 실행하면Let's Encrypt tools
이 기본 설치에 포함되어 있습니다. -
설치 완료후 stack.conf 파일을 열어,
LETSENCRYPT_EMAIL=
변수에 이메일을 입력합니다.
# Let's Encrypt 인증서 설치시 사용할 이메일 주소. (연장 안내 등 메일 수신 동의됨)
LETSENCRYPT_EMAIL=
-
./self-update.sh
를 실행하여 stack 을 최신 버전으로 업데이트합니다. - stack.conf 파일의
NGINX=
다음 라인에 다음 변수를 추가하고, 이메일을 입력합니다.
# Let's Encrypt 자동화툴 설치 여부
LETSENCRYPT=1
# Let's Encrypt 인증서 설치시 사용할 이메일 주소. (연장 안내 등 메일 수신 동의됨)
LETSENCRYPT_EMAIL=
-
./install.sh
를 실행하여 설치를 진행하면 됩니다. (이미 설치된 PHP/mariadb/nginx 등은 중복 설치되거나 기존 설정을 건드리지 않습니다.)
-
./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-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
- http 주소로 접속시 https 로 자동 이동 됩니다. 이 기능을 사용하지 않으려면 nginx 설정에서 다음 항목을 주석처리(#)하면 됩니다.
vi /etc/nginx/conf.d/ssl-stable.conf
# Force https
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
SSL 보안 수준은 Mozilla SSL Configuration Generator 의 3가지 옵션을 사용하였습니다.
- nginx 설정에서 include 파일명만 변경해주면 됩니다.
vi /etc/nginx/conf.d/ssl-stable.conf
#include /etc/letsencrypt/php79/ssl-stable.conf;
include /etc/letsencrypt/php79/ssl-legacy.conf;
- 서브 도메인 추가 및 와일드 카드 관련 https://github.com/php79/stack/issues/57