Certbot 인증서로 Nginx SSL(HTTPS) 설정하기

HHyeonYoung·2023년 10월 14일
0

인프라

목록 보기
1/1

SSL인증서를 발급받아 Nginx에 설정하는 방법과
http로 접근하던 페이지에 https를 적용하여 보안을 강화.

도메인 준비


SSL인증서를 발급받기 위해서는 도메인이 있어야 하고 구매한 도메인을 DNS서버에 등록한 뒤
어디서나 공개조회(쿼리)되고 있는 상태여야 인증서를 발급받을 수 있다고 함.

기존에 가비아에서 구입한 도메인이 있어서 도메인 세팅은 패스

Nginx 설치


# Nginx 설치
$ sudo apt install nginx

# Nginx 실행
$ sudo systemctl start nginx

설치 후 설정은 '/etc/nginx/nginx.conf'
나는 추가적으로 '/etc/nginx/sites-available/default'에서 설정함

Certbot 설치


$ sudo snap install certbot --classic
$ sudo certbot --nginx

명령어를 입력해서 certbot을 설치하는데 '--nginx certonly'를 주면
nginx 셋팅을 직접 하는거라고 한다.

명령어를 실행시키면 여러 질문들이 뜨는데 시키는대로 입력하고 쭉 y(yes) 누르고
'Congratulations! .....' 멘트가 표시되고

Certbot은 자동으로 Let's Encrypt를 통해 SSL 인증서를 발급해오는데, '/etc/letsencrypt/live'에 인증서가 저장된다.

Let's Encrypt는 무료 SSL인증서를 발급해주는 곳이고, Certbot는 Let's Encrypt 인증서를 자동으로 발급 및 갱신을 해주는 프로그램이다.

Certbot으로 받은 인증서(Encrypt)는 유효기간이 3개월이라 이후에 renew 해줘야 한다!


Nginx 설정


SSL인증서를 발급받았다면 이제 인증서를 Nginx에 설정해줘야 함

#nginx.conf에서 수정할 경우
$ sudo vim /etc/nginx/nginx.conf

#sites-available/default에서 수정할 경우
sudo vim /etc/nginx/sites-available/default

'nginx.conf'에서 수정한다면

user ubuntu;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 1024;
        # multi_accept on;
}

http {

	#http{ } 내에서 server 설정
	# 80 포트로 접근시 443 포트로 리다이렉트
    server{
    	listen 80;
        if ($host = dev.example.com){
        	return 301 https://$host$request_uri;
    	}
	}

	server{
 		server_name dev.example.com
            
       	# 443 포트로 접근시 ssl을 적용한 뒤 8000포트로 요청을 전달하는 설정
      	location / {
         	proxy_pass http://127.0.0.1:8000;
       		proxy_set_header Host $host;
      	}
        
        listen 443 ssl; # managed by Certbot
        
        ssl_certificate /etc/letsencrypt/live/dev.example.com/fullchain.pem; # managed by Cert>
        ssl_certificate_key /etc/letsencrypt/live/dev.example.com/privkey.pem; # managed by Ce>
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
 	}
    
}

나는 멍청하게 http 블록 밖에서 server 설정을 해줬다가 한참 뒤에 블록 밖에서 수정한걸 알았다...

기본적인 흐름은 80포트(http)로 접근시 443포트(https)로 리다이렉트하고
433포트(https)로 접근했다면 ssl을 적용하고 proxy_pass에 설정한 포트번호로 요청을 전달하는 흐름이다.

'sites-available/default'에서 설정한다면 이것도 위와 똑같이 해주면 됨.

$ sudo systemctl restart nginx

설정이 다 끝났으면 nginx를 재시작해서 변경사항이 적용되게 함.

인증서 갱신


$ sudo certbot renew

Certbot으로 인증서를 발급받았다면 3개월마다 갱신해줘야 함.
인증서의 유효기간이 도래했을때 Certbot으로 SSL인증서를 받을 때 입력한 이메일로 알림이 옴.
그 때 위 명령어로 인증서를 갱신해주면 된다!

profile
보초이지만 호락호락하지 않은 신입 개발자

0개의 댓글