Let’s encrypt 설치 및 운용(CentOS)

Mozila 재단에서 진행하는 무료SSL 인증서 발급 프로젝트 이다. ( https://letsencrypt.org )
90일 단위로 갱신을 해야 하는 단점이 있지만 이부분은 cron 등록으로 극복이 가능 하다.
무엇보다 무료라는 강점이 있기 때문에 많이 사용될 가능성이 크다.

 

SSL을 도입할경우 스니핑등을 예방할수 있으며 국내법적으로는 회원의 개인정보를 수집하는 사이트의 경우SSL을 도입해야 한다.

여기서 설명하는 내용은 CentOS 6.x 와 이미 APM이 구축된 서버에서 진행 하였습니다.


certbot-auto 의  설치 방법은 더이상 유효 하지 않습니다. – 아래 글을 확인해 주세요 ‘ㅅ’a

Let’s encrypt 사용 방법 변경


1. 설치 ( ISU 레포지트리 배포처 https://ius.io/GettingStarted )

설치는 그냥 필수 라이브러리를 설치하고 git을 통해 실행 스크립트를 가져오는 수준이다.

 

2. 실행(일반 사용법)

웹서버 운용시 일반적으로 gcc 에 보안설정을 해서 제공을 하게 되는데 일반적으로 퍼미션 700 과
chattr +i 를 해놓는다.
gcc , c++ 명령어에 보안설정을 하지 않았다면 2번째줄만 실행하면 되겠다.

 

 

3. 단축 명령어(인증서 발급)

4~5번재줄이 수정해야 하는 부분 이다.
-d 도메인  –email 이메일주소  –webroot w /경로/ 를 자신의 서버에 맞게 수정하여 실행한다.
일반적으로 -d enteroa.kr -d www.enteroa.kr -d wp.enteroa.kr과 같이 명령해야 한다.
www.도메인.com 을 빼먹는 짓을 하지 말자 ‘ㅅ’a

 

4. 아파치 설정.

SSLProtocol, SSLCipherSuite, SSLHonorCipherOrder 설정은 그냥 같이 올렸다.
https://www.ssllabs.com/ssltest 에서 테스트를 할경우 A+를 받을 수 있는 설정임.
20160314_PicPick_094231

설정 완료 후 브라우져를 통한 사이트 접속을 해서 https 가 적용되었는지 확인한다.

20160312_PicPick_154707녹색 열쇠가 뜨지 않고 아래와 같이 일부가 안전하지 않다고 뜬다면.
기존에 구성된 홈페이지의 소스상 https 가 아닌 http 선언이 있기 때문이다.(대부분 이미지 혹은 외부링크)
20160315_PicPick_160433
아래처럼 이걸 소스에서 찾아서 일일이 수정해주는 방법이 있겠다 =3=a

 

 

5. 갱신

gcc 와 c++ 명령어 보안설정 때문에 스크립트를 운용한다.
일반적으로는 /usr/local/letsencrypt/letsencrypt-auto renew –quite 으로도 충분.
자체적으로 만료일이 도래하지 않은 도메인은 갱신을 건너뛰기 때문에 매일 돌리면 된다.

 

6. 이용 제한( rate limit )
아무래도 무료SSL의 무분별한 사용을 막기 위한 설정이라고 보면 되겠다.

  1.  1개의 IP 에서 3시간동안 10개의 도메인을 허용한다.
  2.  7일 동안 1개의 도메인에서 5개의 도메인레코드 선언을 허용합니다.
    (enteroa.kr / www.enteroa.kr / mail.enteroa.kr / blog.enteroa.kr / etc… )

이 rate limit 는 발급받은 SSL 을 revoke(취소) 하거나 /etc/letsencrypt/ 에 생성된 항목을 삭제하더라도 반환되지 않습니다.

 

7. 인증서에 도메인 추가.
예를 들어 wp.enteroa.kr 만 등록한 도메인이 있을경우
인증서등록을 기존 도메인명을 처음부분에 선언하여 레코드(DNS)를 추가할 수 있다.

위 명령어로 진행시 기존 인증서에 도메인을 추가(EXPAND)할껀지 물어보는데 enter를 눌러서 진행하면 된다.

 

자세한 사용법(물론영어)은  http://letsencrypt.readthedocs.org/en/latest/using.html

20 thoughts on “Let’s encrypt 설치 및 운용(CentOS)”

  1. 포스팅 덕분에 SSL 설치에 성공하였습니다.

    대단히 감사합니다.

    5. 갱신은 그냥

    소스 고칠 필요 없이 그대로 클론 데일리에 넣어주면 될까요?

    find /tmp -maxdepth 1 -type d -perm 700 -user root -name ‘tmp.*’ -exec rm -rf {} \;

    이부분의 -name를 유저아이디로 고쳐야할지 궁금합니다.

    1. 댓글 감사드립니다.
      find 문의 경우 인증서 리뉴시에 /tmp 안에 랜덤한 이름으로 생성이 되기 때문에 삭제하는 부분 입니다 🙂
      별도 수정없이 쓰시면 됩니다.
      tmp.xxxxxxxxx 라고 생성이 되며 일반적인 session 등의 파일은 sess_xxxxxxx 으로 생성되기 때문에
      영향 받지 않습니다 🙂

  2. 빠른 회신 너무나 감사드립니다.

    저같은 경우 설치 경로가 /root/letsencrypt
    인데요

    cd /root/letsencrypt/letsencrypt
    chattr -i /usr/bin/gcc /usr/bin/g++
    /root/letsencrypt/certbot/certbot-auto renew –quiet
    chmod 700 /usr/bin/gcc /usr/bin/g++;chattr +i /usr/bin/gcc /usr/bin/g++
    find /tmp -maxdepth 1 -type d -perm 700 -user root -name ‘tmp.*’ -exec rm -rf {} \;

    로 수정을 하면 될까요 ~

    오늘도 즐거운 하루 되십시오.
    감사합니다.

    1. 넵 cert-bot 의 경우 어떤 경로에 설치하더라도
      실제 실행이 될때는 /root/.local/share/letsencrypt 라는곳으로 이동하여 실행이 됩니다.

      적어 놓은걸 볼때 아래 경로가 살짝 틀린것 같으니 실제 경로로 맞추시고 실행하면 될듯 합니다.
      cd /root/letsencrypt/letsencrypt
      /root/letsencrypt/certbot/certbot-auto renew –quiet

      리뉴 스크립트는 실제 업데이트할것(만료되기 1달전 인증서)이 없을경우 그냥 자동으로 skip 이 되니까 crond 등록전 실행을 한번 해보세요 @_@a

  3. bash-4.1# /etc/cron.daily/letsencrypt_renew.sh

    /etc/cron.daily/letsencrypt_renew.sh: line 5: syntax error near unexpected token &'
    /etc/cron.daily/letsencrypt_renew.sh: line 5:
      if [[ -z ps -e|grep "^$exist_pid " ]];then rm -f $0.pid;exec_confirm=”Y”‘

    번거로우시겠지만 정상 실행된것이 맞는지 확인 해주시면 감사드리겠습니다.

    1. 5번째줄에 첫부분에 & nbsp; 를 삭제해 주세요;;
      웹 소스가 왜 저기 들어가쓸까요 =3=aa

      1. 바쁘신 와중에 너무나 죄송합니다.

        & nbsp; 요 웹소스 잘 삭제 하였습니다.

        2달 갱신 전에는

        /etc/cron.daily/letsencrypt_renew.sh: line 14: /root/letsencrypt/certbot/certbot-auto: 그런 파일이나 디렉토리가 없습니다.

        이렇게 나오는게 정상일런지요 아직 2개월 이전이라서 certbot-auto 파일이 생성되지 않은게 맞나 싶어서요.

        1. 설치 경로가 /root/letsencrypt 이라고 하셨으니
          아래처럼 되어야 하지 않을까 싶네요 ‘ㅅ’a
          #!/bin/bash
          if [[ -s $0.pid ]];then exist_pid=$(cat $0.pid)
          if [[ -z $(ps -e|grep "^$exist_pid ") ]];then rm -f $0.pid;exec_confirm="Y"
          else exec_confirm="N";echo -e "\e[1;32mShell has already running...\e[0m";fi
          else exec_confirm="Y";fi;if [[ $exec_confirm == "Y" ]];then
          echo $$ > $0.pid
          cd /root/letsencrypt
          chattr -i /usr/bin/gcc /usr/bin/g++
          /root/letsencrypt/certbot-auto renew --quiet
          chmod 700 /usr/bin/gcc /usr/bin/g++;chattr +i /usr/bin/gcc /usr/bin/g++
          find /tmp -maxdepth 1 -type d -perm 700 -user root -name 'tmp.*' -exec rm -rf {} \;
          rm -f $0.pid
          fi

          렛츠엔크립트툴 자체가 기존에 letencrypt 에서 certbot 으로 변경 되었으니 설치된 폴더가 letsencrypt 인지 certbot 인지 확인을 해보세요 ‘ㅅ’a
          명령어로 letsencrypt-auto 에서 certbot-auto 로 바뀌었답니다.

          1. /root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
            DeprecationWarning

            이런 파이썬 업그레이드 경고가 나오지만 잘작동 되는것으로 보여집니다.

            대단히 감사합니다. ^^

          2. 말씀하신대로 굳이 파이썬 2.7 을 깔지않고도 정상적인 운영이 가능합니다.
            DeprecationWarning 은 삭제예정 명령어가 있다는 경고 정도 이기 때문에 큰 문제가 되지 않습니다.
            파이썬 2.7 버전에서는 아무런 에러가 나오지 않을거구요 ‘ㅅ’a
            근데 CentOS7 도 기본 포함 파이썬이 2.6대 이고요 ‘ㅅ’a

  4. startcom 인증기관이 제외?됬다고해서 자료찾다가 들려서 한번에 다시 ssl설정 완료했습니다.
    좋은 지식 정말 감사드립니다 복받으세요.

    1. 방문 감사드립니다 (__)
      let’s encrypt 는 웹표준 재단인 모질라에서 만든 부분이 있고 많은 네트워크 장비를 제작하는
      기업을이 스폰을 하고 있기 때문에 없어지는 일이 없을꺼 같습니다.
      잘 사용하시기 바랍니다 🙂

  5. 정말 많은 도움이 되었습니다.
    좋은 글 공개해 주셔서 감사합니다.

    1. 사이트 방문 및 댓글 감사드립니다.
      블로그를 운영해보니 댓글 받는 기분이 좋습니다 🙂

  6. root@localhost local]# git clone https://github.com/certbot/certbot
    Cloning into ‘certbot’…
    error: SSL certificate problem, verify that the CA cert is OK. Details:
    error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/certbot/certbot/info/refs?service=git-upload-pack
    fatal: HTTP request failed
    [root@localhost local]#

    80포트가 막히면 다른 방법이 없는지요?
    감사합니다.

    1. 이런건 빨리빨리 적용해야 합니다 🙂
      일반 유료 인증서 발급받기가 너무 힘드니까욤

Comments are closed.