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 )
|
~]# 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 ~]# git clone https://github.com/certbot/certbot |
설치는 그냥 필수 라이브러리를 설치하고 git을 통해 실행 스크립트를 가져오는 수준이다.
2. 실행(일반 사용법)
|
~]# chattr -i /usr/bin/gcc /usr/bin/g++ ~]# cd /usr/local/certbot ~]# /usr/local/certbot/certbot-auto certonly ~]# chmod 700 /usr/bin/gcc /usr/bin/g++;chattr +i /usr/bin/gcc /usr/bin/g++ |
웹서버 운용시 일반적으로 gcc 에 보안설정을 해서 제공을 하게 되는데 일반적으로 퍼미션 700 과
chattr +i 를 해놓는다.
gcc , c++ 명령어에 보안설정을 하지 않았다면 2번째줄만 실행하면 되겠다.
3. 단축 명령어(인증서 발급)
|
~]# cd /usr/local/certbot ~]# ./certbot-auto certonly --server https://acme-v02.api.letsencrypt.org/directory \ --rsa-key-size 4096 --agree-tos --email enteroa.j@gmail.com \ --webroot -w /free/home/enteroa/html/ \ -d wp.enteroa.kr |
4~5번재줄이 수정해야 하는 부분 이다.
-d 도메인 –email 이메일주소 –webroot w /경로/ 를 자신의 서버에 맞게 수정하여 실행한다.
일반적으로 -d enteroa.kr -d www.enteroa.kr -d wp.enteroa.kr과 같이 명령해야 한다.
www.도메인.com 을 빼먹는 짓을 하지 말자 ‘ㅅ’a
4. 아파치 설정.
|
SSLProtocol ALL -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK SSLHonorCipherOrder on Listen 443 <VirtualHost *:443> DocumentRoot /free/home/enteroa/html ServerName wp.enteroa.kr SSLEngine on SSLCertificateFile /etc/letsencrypt/live/wp.enteroa.kr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/wp.enteroa.kr/privkey.pem Header always set Strict-Transport-Security "max-age=15552000" </VirtualHost> |
SSLProtocol, SSLCipherSuite, SSLHonorCipherOrder 설정은 그냥 같이 올렸다.
https://www.ssllabs.com/ssltest 에서 테스트를 할경우 A+를 받을 수 있는 설정임.
설정 완료 후 브라우져를 통한 사이트 접속을 해서 https 가 적용되었는지 확인한다.
녹색 열쇠가 뜨지 않고 아래와 같이 일부가 안전하지 않다고 뜬다면.
기존에 구성된 홈페이지의 소스상 https 가 아닌 http 선언이 있기 때문이다.(대부분 이미지 혹은 외부링크)
아래처럼 이걸 소스에서 찾아서 일일이 수정해주는 방법이 있겠다 =3=a
|
<script type="text/javascript" src="http://wcs.naver.net/wcslog.js"></script> <script type="text/javascript" src="//wcs.naver.net/wcslog.js"></script> |
5. 갱신
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#!/bin/bash # 실행 조건 1일 1회 작동 ## pid 생성 중복실행을 방지 ####################################################### lockfile=/var/lock/$(basename $0) if [ -f $lockfile ];then P=$(cat $lockfile) if [ -n "$(ps --no-headers -f $P)" ];then exit 1 fi;fi echo $$ > $lockfile trap 'rm -f "$lockfile"' EXIT ################################################################################### cd /usr/local/certbot chattr -i /usr/bin/gcc /usr/bin/g++ /usr/local/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 {} \; ################################################################################### if [[ -n `find /etc/letsencrypt/archive -type f -mtime 0` ]];then apachectl restart ##nginx -s reload fi ################################################################################### |
gcc 와 c++ 명령어 보안설정 때문에 스크립트를 운용한다.
일반적으로는 /usr/local/letsencrypt/letsencrypt-auto renew –quite 으로도 충분.
자체적으로 만료일이 도래하지 않은 도메인은 갱신을 건너뛰기 때문에 매일 돌리면 된다.
6. 이용 제한( rate limit )
아무래도 무료SSL의 무분별한 사용을 막기 위한 설정이라고 보면 되겠다.
- 1개의 IP 에서 3시간동안 10개의 도메인을 허용한다.
- 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)를 추가할 수 있다.
|
~]# cd /usr/local/certbot ~]# ./certbot-auto certonly --server https://acme-v02.api.letsencrypt.org/directory \ --rsa-key-size 4096 -agree-dev-preview --agree-tos \ --webroot -w /free/home/enteroa/html/ --email enteroa.j@gmail.com \ -d wp.enteroa.kr -d enteroa.kr -d www.enteroa.kr |
위 명령어로 진행시 기존 인증서에 도메인을 추가(EXPAND)할껀지 물어보는데 enter를 눌러서 진행하면 된다.
자세한 사용법(물론영어)은 http://letsencrypt.readthedocs.org/en/latest/using.html