본문 바로가기
server/💻Server

AWS[Linux] - Certbot으로 SSL 발급해서 https 적용하기

by 발개발자 2022. 12. 17.
반응형

  Certbot?

Certbot이란 SSL certificates를 발급해주는 프로그램이다.

정확히는 수동으로 관리되는 웹사이트에서 Let's Encrypt 인증서를 자동으로 사용하여 HTTPS를 활성화하는 무료 오픈 소스 소프트웨어 도구이다.

기존에는 https를 위하여 SSL 인증서를 구매해야 했지만, Certbot으로 개인용에서는 무료로 발급받을 수 있다.

 

공식 홈페이지

certbot.eff.org

 

Certbot

Tagline

certbot.eff.org

 

  작업내용

본인은 현재 domain을 구매하여 AWS의 router53을 통해 DNS설정을 완료한 상태이다.

이제 해당 도메인을 https로 접근하게 하는 작업을 할 예정이다.

 

 

  Nginx 설치

 

sudo yum install nginx

sudo service nginx start

ps -ef | grep nginx

 

nginx 설치, nginx 서비스 시작, 프로세스확인을 통해 정상적으로 nginx가 설치되었는지 확인한다.

 

 

  Nginx Conf 설정

 

Nginx 버전에 따라 conf 설정하는 위치가 상이할 수 있다. 아래의 두 파일 중 하나에 기본 서버셋팅이 되어있다.

sudo vi /etc/nginx/nginx.conf 
or 
sudo vi /etc/nginx/conf.d/default.conf

 

해당 파일의 server block이 있다면 아래와 같이 수정하면 된다.

 

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  본인 도메인 주소. 도메인이 없다면 _ 입력;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
            proxy_pass http://localhost:8080;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;

    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    ....
}

이렇게 설정하면 80포트로 요청이 들어올 경우 8080포트로 리다이렉트를 해주게 된다.

 

 

 

  Certbot 설치

 

EPEL 설치

sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/

홈 디렉토리에서 EPEL을 다운로드 한다. Certbot은 Dependency를 가지고 있는데 그거에 대한 설치를 미리해주는 것이다.

 

EPEL 레파지토리 패키지 설치

sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm

 

EPEL 활성화

sudo yum-config-manager --enable epel*

 

certbot 설치

sudo yum install -y certbot python2-certbot-apache

 

certbot-nginx 설치

sudo yum install certbot-nginx

 

ssl발급시 certbot이 nginx conf를 자동으로 핸들링 해주게 된다.

 

sudo certbot --nginx

이제 해당 명령어를 실행하였을 때, 본인의 이메일을 입력하고 약관에 동의하면 설치가 진행된다.

 

그리고 위의 nginx conf설정할 때 본인처럼 domain을 입력하였다면 아래와 같이 뜰 것이다.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: 내가입력한도메인.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

본인은 1을 입력한 후  enter를 통해 진행하였다.

 

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for 도메인
http-01 challenge for 도메인
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/httpd/conf/httpd-le-ssl.conf
Deploying Certificate for example.com to VirtualHost /etc/httpd/conf/httpd-le-ssl.conf
Enabling site /etc/httpd/conf/httpd-le-ssl.conf by adding Include to root configuration
Deploying Certificate for 도메인 to VirtualHost /etc/httpd/conf/httpd-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

방문자의 HTTP 연결도 허용한다면 1번,  HTTPS만 허용한다면 2번을 누른 후 Enter.

 

이렇게 되면 Certbot은Nginx 구성을 수정한 후 완료보고를 한다.

 

nginx.conf 파일도 다시 확인해보면 certbot관련 설정이 추가된 것을 확인할 수 있다.

  listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/...; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/...; # managed by Certbot
    include /etc/letsencrypt/...; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl...; # managed by Certbot

 

이제 HTTPS 적용은 완료되었다.

AWS에서 443 port를 허용해 준 후, nginx를 재기동하면 https로 접근할 수 있는 걸 확인할 수 있다.

 

아래의 블로그를 참고하면 인증서 갱신까지 crontab으로 자동화할 수 있다.

가뭄의 단비같은 블로그였다,,

 

참고 블로그

https://m.blog.naver.com/hsmang/221836126462

반응형

댓글