본문 바로가기

컴터/linux

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

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

 

 

 

 

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

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

 

참고 사이트 :

메뉴얼 : 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/

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