[Ubuntu] SSL 인증서 설치

 SSL 발급 및 적용 방법

인증서 발급 프로그램을 서버에 설치해야한다.

Let’s Encrypt 는 Ubuntu 16.04 LTS 에서 기본패키지로 추가되었다. 따라서 쉽게 설치할 수 있다.
반면 Ubuntu 14.04 LTS 에서는 기본패키지가 아니기 때문에 몇 줄 더 입력해야 한다.

발급, 설치, 적용 방법은 다음과 같다.
모든 단계는 Linux root 계정으로 진행한다.

# apt-get install letsencrypt

# letsencrypt certonly --webroot --webroot-path=/home/myuser3/www -d myuser3.com -d www.myuser3.com

* 명령어 설명
-d 는 도메인명을 지정하면 된다. 최대 100개의 도메인 이름을 지정할 수 있다. (한 인증서가 서로다른 100개의 도메인 인증을 할 수 있음) 일반적으로는 기본도메인과 www 도메인 두개를 지정한다.
-webroot 는 웹인증을 받을 것이라는 것이다. 외부 인증프로그램이 -d 에 지정된 도메인 사이트에 접속한다.
-webroot-path 는 웹루트의 경로이다. 보통 index 페이지가 위치하는 경로이다. 인증 프로그램이 이 경로에 임시 랜덤 파일을 생성하고, 외부 인증프로그램이 이 파일을 접근할 수 있다면 Domain Validation 이 되는 것이다.

Let’s Encrypt 인증 오류 발생시 다음의 사항을 확인한다.
다음의 문서로 이동해서
# Allow Lets Encrypt Domain Validation Program
설정이 되어있는지 확인하여라.
Apache 사용자의 경우 : https://blog.lael.be/post/73
#apache2.conf

발급성공
사용자 삽입 이미지

/etc/letsencrypt/live/[인증서명]/ 위치에 발급된다.
cert.pem – 인증서 파일
chain.pem – 인증서 발급자 파일
fullchain.pem – cert.pem 과 chain.pen 을 하나로 합쳐놓은 파일
privkey.pem – 인증암호를 해독하는 개인키

#TIP : 이때 발급된 인증서 파일은 웹서버 인증서(HTTPS), 메일서버 인증서(IMAPS, POP3S, SMTPS), VPN서버 인증서(SSTP), 윈도우 원격데스크톱 인증서(MSTSC), Gitlab, OwnCloud 등의 용도로 사용 할 수 있다. (인증서 만료시 갱신해야하는 번거로움이 생기겠지만..)

사용자 삽입 이미지

Apache2 서버에서는 cert.pem, chain.pem, privkey.pem 을 사용합니다.

적용방법

Apache2 적용방법 : https://blog.lael.be/post/73 13번 항목을 참조한다.

SSLEngine on
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:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
 
SSLHonorCipherOrder on
 
SSLCertificateFile "/etc/letsencrypt/live/mysitename.com/cert.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/mysitename.com/privkey.pem"
SSLCertificateChainFile "/etc/letsencrypt/live/mysitename.com/chain.pem"

인증서 갱신 프로그램 주기적으로 실행하기
매주 월요일 새벽 5시 10분에 인증서 갱신을, 매주 월요일 새벽 5시 15분에 웹서버 프로그램 변경사항 적용을 실행하도록 설정한다.

# crontab -e

혹시나 에디터 선택문구가 출력된다면 3번을 누르세요. (재선택 명령어 : select-editor)

 

– Apache2 웹서버를 사용하는 경우

10 5 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log
15 5 * * 1 /usr/sbin/service apache2 reload

일부 서버 인증서 삭제

# cd /etc/letsencrypt/live
# ls

반드시 위의 인증서 목록 보기를 통해 인증서 이름을 알아두어야 한다.
현재 사용중인 인증서 취소(revoke)

# letsencrypt revoke --cert-path /etc/letsencrypt/archive/my-examplesite.com/cert1.pem

갱신 목록에서 제거
이 목록에서 지우면 renew 를 하지 않는다.

# cd /etc/letsencrypt/renewal/
# ls

설정파일을 수동으로 선택해서 지운다. (항상 지우는 명령을 실행할 땐 5초동안 고민한 뒤에 엔터를 눌러라.)

 
기존에 발급받았었던 파일 삭제 (옵션)

찌꺼기 파일인데, 지워도 되고, 안지워도 되고. 아래 위치에서 폴더를 삭제하면 된다.

# /etc/letsencrypt/live/
# /etc/letsencrypt/renewal/

참조 블로그 : https://blog.lael.be/post/5107