siklog클라우드 [Server/Security] Let’s Encrypt SSL 무료 인증서 발급 방법ms 2022. 4. 17. 18:48 Let’s Encrypt 는 보안 웹사이트를 위한 전송 계층 보안 암호화(SSL, TLS) 를 위해 무료로 인증서를 제공해주는 인증 기관이다. 인증서 발급 시 유효기간 (90일)이 존재한다.(갱신을 주기적으로 해줘야함) 0. 인증서 발급 사전 준비 먼저 인증서 발급 전 다음 조건이 필요하다. Let’s Encrypt SSL 인증서 발급은 Certbot을 이용하며, 인증서 설치를 위한 Certbot tool 을 먼저 설치해준다. # sudo apt update
Certbot은 파이썬 2.7 또는 3.6버젼 이상을 지원하고 있어 python2 혹은 python3를 설치해주면 된다. * 권고사항은 python3 ubuntu에서 certbot 및 웹서버 플러그인 설치: centos에서 certbot 및 웹서버 플러그인 설치: 인증서 발급을 위한 패키지 설치가 완료되었다면 인증서 발급을 진행하면 된다. certbot 을 이용한 인증서 발급 방법은 아래와 같이 크게 4가지 방법이 존재한다.
1. webroot으로 SSL 인증서 발급 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급하는 방법으로 서버 내에 .well-known이 있는 곳을 지정해 준다. (여기에서 설명하는 인증서 발급, 적용 환경은 Ubuntu, NginX 기준 ) 1) 특정 폴더를 만든다. 2) 이 특정 폴더에서 letsencrypt.conf 파일을 만든다. 3) 이를 Nginx 설정 파일에서 이 파일을 읽어오도록 한다. 먼저 특정 폴더를 만들어 준다. # mkdir -p /var/www/letsencrypt/.well-known/acme-challenge 다음 webroot 경로를 알려주는 letsencrypt.conf 파일을 만든 후 편집기를 이용해서 새로 만들 파일을 열어준 후 아래 내용을 추가해 준다. * 이 파일은 일반적으로 /etc/nginx/snippets/ 위치에 만듦. # nano /etc/nginx/snippets/letsencrypt.conf 설정이 끝났다면 웹서버를 다시 시작해 주도록 한다. # sudo service nginx restart SSL 인증서 발급 * webroot-path는 웹서버 루트가 아닌 .well-known 폴더가 있는 곳이다. # certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d [도메인] 2. webserver 를 통한 인증서 발급 Apache나 Nginx와 같은 웹서버 옵션을 이용해서 Let’s Encrypt SSL 인증서 발급받을 수도 있다. (여기에서 설명하는 인증서 발급, 적용 환경은 CentOS 7, Apache 기준 ) 웹서버를 통한 SSL 인증서 발급은 standalone 방식과 달리 발급 받을 시 사이트 서비스를 중단하지 않아도 되며, 웹서버가 알아서 적절한 SSL 옵션을 제안해 적용해 준다. 웹서버를 이용하는 SSL 인증 방식 선택 시 Apache, Nginx 설정에서 도메인이 제대로 설정되어 있어야 하기 때문에 먼저, Apache, Nginx 설정에서 도메인이 제대로 설정되어 있는지 확인해야 한다. * 방화벽, iptables 등과 같은 접근 제어가 설정되어 있다면 서비스 및 포트 허용을 추가적으로 진행 아래 경로에서 servername이 등록되어 있는지 확인해준다. # cat /etc/httpd/conf/httpd.conf 아래 명령어를 이용하여 인증서 발급을 시작한다. 명령어 수행 시 certbot 은 Apache 설정파일을 참조하여 등록된 모든 호스트에 대해 인증서 발급을 수행한다. * CentOS의 경우 /etc/httpd/conf/httpd.conf # certbot --apache --email admin@[email_address] --agree-tos 호스트 설정을 하지 않았다면 아래 명령어로도 인증서 발급이 가능하다. # certbot --apache certonly -d [도메인] 크론탭을 통해 자동 갱신이 설정되도록 설정할 수도 있다. # sudo certbot renew --dry-run 3. standalone 옵션을 이용한 인증서 발급 standalone 옵션 적용 방식은 간편하고 빠르고 안정적이지만, 서비스를 중단해야하는 단점이 있다. 먼저 웹서버를 중단시킨다. # systemctl stop httpd certbot 명령을 이용해 SSL 인증을 시작해준다. # certbot certonly --standalone -d [도메인] 인증이 완료되면 웹서버를 다시 가동시켜준다. # systemctl restart httpd 4. DNS 를 이용한 인증서 발급 와일드 카드 방식으로 인증서 발급이 가능하며, 도메인이 연결된 DNS의 TXT레코드를 이용해 인증받는 방식이다. * 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 함 인증서 발급 발급 시작: 위 명령을 수행하면 DNS서버에 _acme-challenge.domain.com 이름의 TXT레코드를 추가하라고 나오게 되는데 사용중인 도메인 서버에 TXT레코드에 아래 제시된 value를 추가한다. * 레코드 등록 이전에 엔터를 누르면 안됨 * 여기서는 NCP의 Global DNS를 이용하여 TXT레코드를 등록하였다. dig 또는 nslookup 등으로 TXT레코드가 설정되었는지 확인 후 진행하도록 한다. * ANSWER SECTION에 TXT레코드가 정상적으로 출력되는 것을 볼 수 있다. 레코드 등록 후 엔터를 눌러 발급을 진행해 주면 아래 경로에 인증서가 발급된 것을 확인할 수 있다. # cd /etc/letsencrypt/archive |