ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [작업정리] 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/

    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



    댓글 0

Designed by Tistory.