무료 인증서를 발급할 일이 생겨 자료 찾고 적용했는데, 정리하는 겸 포스팅합니다.
아래 내용에서 틀린점을 찾으신다면 댓글 바랍니다.
참고 사이트 :
메뉴얼 : https://certbot.eff.org/docs/using.html
https://findstar.pe.kr/2018/09/08/lets-encrypt-certificates-rate-limit/
1. 2017.11 기준 지원 브라우저 : https://letsencrypt.org/docs/certificate-compatibility/
Mozilla Firefox >= v2.0
Google Chrome
Internet Explorer on Windows XP SP3 and higher
Microsoft Edge
Android OS >= v2.3.6
Safari >= v4.0 on macOS
Safari on iOS >= v3.1
Debian Linux >= v6
Ubuntu Linux >= v12.04
NSS Library >= v3.11.9
Amazon FireOS (Silk Browser)
Cyanogen > v10
Jolla Sailfish OS > v1.1.2.16
Kindle > v3.4.1
Java 7 >= 7u111
Java 8 >= 8u101
Blackberry >= 10.3.3
1-1. rate limit : https://letsencrypt.org/docs/rate-limits/
* 구글 번역기 돌려서 한 것이라 꼭 위 링크에서 재확인 필
- 한 IP에서 3시간안에 10개의 계정 발급가능 (10 Accounts per IP Address per 3 hours라는 Accounts가 인증서가 아니면 이메일.)
- 인증서는 1주일에 20개까지만 발급가능
- 메인도메인마다 1개의 인증서 발급 : www.domain.com, abc.domain.com 이면 domain.com에 대해 1개의 인증서 발급받을 수 있다
- 인증서 하나에 서브도메인 100개까지 같이 사용 가능 > 총 2,000개 도메인 가능 (wild card 인증서는 아님)
- 중요 : 동일 인증서 추가/갱신은 1주일에 5번까지만 가능. 그후 차단됨.
- 차단후 인증서를 삭제했다고 제한이 풀리는 건 아님.
>>> 한 IP, 한 서버에서 가능한 갯수일듯
>>> 1주일뒤 재신청 가능 : 목요일 차단되었다면 다음주 목요이부터 신청 가능
- 유효기간 : 90일
- 갱신 가능 기간 : 만료일 30일전부터 가능
- 2018년 1월부터 wild card domain 지원예정이니 현재 보다 훨씬 관리가 쉬워질듯 함 (현. 2017.11.02)
2. 프로그램 설치
* python2.6이하는 추후 deprecate 될 것이어서 2.7이상으로 업그레이드 해줘야 함.
cd /usr/local/
yum install epel-release
rpm -ivh https://rhel6.iuscommunity.org/ius-release.rpm
yum install git python27 python27-devel python27-pip python27-setuptools python27-virtualenv python27-libs
2. certbot 다운로드
git clone https://github.com/certbot/certbot
3. 인증서 설치
/usr/local/certbot/certbot-auto certonly --rsa-key-size 4096 --agree-tos \
--email 이메일 \
--cert-name 인증서이름 \
--webroot \
-w /웹서버 경로1/ \
-d 호스트.com -d www.호스트.com -d search.호스트.com \
-w /웹서버 경로2/ \
-d ohter.호스트.com -d other2.호스트.com
예:::
/usr/local/certbot/certbot-auto certonly --rsa-key-size 4096 --agree-tos \
--email email.name@domain.com \
--cert-name domain.com \
--webroot \
-w /home/pc/ \
-d domain.com -d www.domain.com \
-w /home/mobile/ \
-d m.domain.com
> --agree-tos 는 ACME의 각종 동의서에 동의한다는 flag
> /etc/letsencrypt/live/ 인증서 생성되어 있으면 성공.
> 같은 --cert-name [인증서이름] 할때 인증서 이름이 이미 있다면 덮어쓴다. --cert-name 옵션이 없다면 -d 도메인 별로 각각 인증서 파일을 생성한다.
4. ssl virtual host 설정
vi /~/httpd-ssl.conf 혹은 설정에 맞는 파일 오픈
Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /home/pc
ServerName domain.com
ServerAlias www.domain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/인증서 이름/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/인증서 이름/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/인증서 이름/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/인증서 이름/fullchain.pem
</VirtualHost>
> 인증서 이름은 [예]에서 "domain.com" 임.
> 아파치 2.2.x 이상 이라면 포트를 자동분배 해주니 위처럼 Listen, NameVirtualHost 가 없거나 주석되어 있다면 작성하거나 주석제거하면 되지만 아파치버전이 못 미친다면 인터넷 찾아서 수동으로 포트 설정해줘야 함.
5. 아파치 재시작
/~/~/apachctl restart
AH00548: NameVirtualHost has no effect and will be removed in the next release /usr/local/apache2/conf/extra/httpd-ssl.
> 오류 발생시 : http://gmate.tistory.com/154
NameVirtualHost *:80 의 선언부분이 필요로 하지 않으며 다음 릴리즈에서 삭제될 예정이라는 경고 문구이니 주석후 재시작.
6. 갱신 체크
/usr/local/certbot/certbot-auto renew --dry-run
> --dry-run은 서버에 어떤 영향도 안미치고 테스트만 보여주니 에러없으면 크론에 등록
7. cron 등록
00 5 * * * root /bin/bash -l -c '/usr/local/certbot/certbot-auto renew --quiet --no-self-upgrade --post-hook "/~/~/apachectl restart"'
> 매일 새벽 5시에 갱신 시도 후 아파치 재시작
> 만료기간 30일전에만 갱신이 된다.
* 기타
1. 옵션
--force-renewal : 만료기간에 관계없이 강제로 갱신하는 옵션.
--no-self-upgrade : 갱신시 다른 패키지 업그레이드 금지. 위 옵션이 없으면 y/n 입력받기 위해 대기하다 끝난다.
--quiet : 로그 출력 안함
--pre-hook "~~~" : certbot 실행전 다른 프로세스 실행
--post-hook "~~~" : certbot 실행 후 ~~~실행
--deploy-hook "~~~" : certbot 실행이 정상적으로 실행 후 ~~~ 실행. 하지만 --post-hook 로 매번 실행하는게 낫다는 의견이 있음.
2. 인증서 취소/삭제 : https://certbot.eff.org/docs/using.html#apache
- 삭제 : /~/certbot-auto delete --cert-name 인증서이름
- 취소 : 인증서가 외부에 노출/해킹되었을 경우 삭제 또는 재발급전에 꼭 해줘야 한다.
/~/certbot-auto revoke --cert-path /etc/letsencrypt/live/인증서 이름/cert.pem
3. 인증서 목록 확인
/~/certbot-auto certificates
4. 특정 한개만 갱신
/~/certbot-auto renew [옵션] --cert-name 인증서 이름
5. 만료되기전 메일을 수신하는데 만약 수신거부를 했다면 복구 방법 : https://letsencrypt.org/docs/expiration-emails/
방법1. 원칙적으로 같은 메일로 복구는 불가능. 1년이 지나면 자동 복구됨.
방법2. 같은 인증서 이름을 다른 이메일로 새로 발급
방법3. 아이디+1@domain.com 와 아이디@domain.com 과 같은 것으로 취급한다고 하니 아래 처럼 +1하여 재등록하여 준다
예:::/~/certbot/venv/bin/certbot register --update-registration --email yourname+1@example.com
※ LB -> VM 세팅 환경에서 client IP가 아닌 LB IP가 로그에 남는다면 "certbot revoke ..." 으로 인증서 취소 및 삭제 후 재발급 해봄
예. /bin/certbot revoke --no-self-upgrade --cert-path /home_nas/cache[0-9]/letsencrypt/live/인증서명/cert.pem --config-dir /home_nas/cache09/letsencrypt
'컴터 > linux' 카테고리의 다른 글
ogg, ogv 파일을 서버에 올리고 플레이 안될때 확인... (0) | 2010.04.29 |
---|---|
centos5 apm 및 모두 기본으로 설치시 주의 사항(내 경험 ㅡㅡ;;) (0) | 2008.09.26 |
cron 에 php 파일 주기적 실행.. (1) | 2008.07.11 |
mod_security ..파일 업로드시 Access deny.. 라는 것이 로그상에 남을때 참고 (0) | 2008.06.03 |