[작업정리] letsencrypt 무료 인증서 발급하여 https 로 접속

컴터/linux 2017.11.10 14:33


무료 인증서를 발급할 일이 생겨 자료 찾고 적용했는데, 정리하는 겸 포스팅합니다.

아래 내용에서 틀린점을 찾으신다면 댓글 바랍니다.


참고 사이트 :

메뉴얼 : https://certbot.eff.org/docs/using.html

https://www.enteroa.com/2016/03/12/lets-encrypt-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%9A%B4%EC%9A%A9centos/comment-page-1/



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



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



저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0