-
[Ubuntu 24.04/Nginx/Let's encrypt] 웹 서버에 SSL 인증서 적용Linux 2025. 1. 21. 10:33
웹 서버에 SSL 인증서 적용
클라우드 운영을 하다보면 웹 서버에 SSL 인증서를 적용하거나 갱신해야 할 일이 생긴다.
Linux VM(OS Ubuntu 24.04)을 생성해서,
Nginx 기반 웹 서버를 올린 뒤
Let's encrypt를 이용하여 인증서를 적용해보자
도메인 생성
먼저 도메인을 생성한다.
가비아에서 .shop 도메인을 1년 500원에 구매 가능하니 구매 하는 것을 추천!
DNS 영역 생성
# Azure portal > DNS 영역 생성
구독, 리소스 그룹 지정 > 인스턴스 세부 정보 이름 : 내 도메인 (bbiyak.shop) > '검토 + 만들기'
NameServer 변경
*Name Server : 도메인의 네임서버(Name Server)는 도메인 이름과 IP 주소 간의 매핑을 관리하는 서버입니다. 사용자가 웹 브라우저에 도메인 이름을 입력하면, 네임서버는 해당 도메인에 연결된 IP 주소를 찾아서 웹사이트에 접속할 수 있도록 도와줍니다.
도메인을 등록할 때, 도메인 등록 기관에서 제공하는 네임서버를 사용하거나, 자체적으로 설정한 네임서버를 지정할 수 있습니다. 네임서버가 올바르게 설정되지 않으면, 도메인이 제대로 작동하지 않거나 웹사이트에 접근할 수 없는 문제가 발생할 수 있습니다.
# NameServer 변경
생성된 DNS 영역의 NS 레코드 집합 확인 후,
내 도메인의 네임서버 설정 클릭
Azure DNS 영역 레코드 집합에 나와있는 대로 변경
웹 서버 생성
# VM 생성
웹 서버 역할을 할 Linux VM 생성 (OS : Ubuntu 24.04)
기본적으로 인바운드 22(SSH), 80(HTTP), 443(HTTPS) 포트는 열어준다.
# VM에 접속 후 Nginx 설치
# 1. 서버 패키지 목록 업데이트 sudo apt update # 2. nginx 설치 sudo apt install nginx # 3. 실행 sudo service nginx start # 4. 상태 확인 sudo service nginx status
레코드 집합 추가
# DNS 영역에서 레코드 집합 추가
이름 : www
유형 : A 레코드
IP 주소 : 웹 서버 VM의 공인 IP
*A레코드: 도메인 A 레코드(A Record)는 DNS(Domain Name System)에서 가장 기본적인 유형의 레코드 중 하나로, 도메인 이름을 IPv4 주소에 매핑하는 역할을 합니다. A 레코드는 사용자가 입력한 도메인 이름을 해당 도메인에 연결된 서버의 IP 주소로 변환하여 웹사이트에 접근할 수 있도록 합니다.
# 확인
http://내 도메인으로 접속하여, 웹 서버에 접속되는지 확인 (ex. http://www.bbiyak.shop)
정상적으로 접속이 된당.
이제 SSL 인증서를 적용하여 https로 접속 가능하게끔 해보자
SSL 인증서 발급
# 웹 서버 VM에서 SSL 인증서 발급
** 참고링크1: https://velog.io/@juhyeon1114/certbot-%EC%84%A4%EC%B9%98-%EC%82%AC%EC%9A%A9%EB%B2%95-ubuntu
** 참고링크2 :https://minsigi.tistory.com/9
# certbot 설치 (letsencrypt 설치로 갈음)
sudo apt-get install letsencryptsudo apt-get install letsencrypt
# 인증서 발급
sudo certbot certonly -d "*.sample.com" --manual --preferred-challenges dnsex) sudo certbot certonly -d "*.sejinzz.shop" --manual --preferred-challenges dns
sudo certbot certonly -d "*.sample.com" --manual --preferred-challenges dns ex) sudo certbot certonly -d "*.bbiyak.shop" --manual --preferred-challenges dns
여기서 Enter 누르지 말고,
DNS TXT record와 value를 복사한다.
# TXT 레코드 추가
위에서 복사한 DNS TXT record와 값을 복사하여 추가해준다.
TXT 레코드가 추가된 것을 확인한다.
이후 다시 터미널로 돌아가 Enter를 눌러 인증서를 성공적으로 발급한다.
SSL 인증서 적용
# 설정 파일 수정
sudo vi /etc/nginx/sites-available/default
# 설정 파일 내 코드 추가
server { listen 443; listen [::]:443; ssl on; #ssl 활성화 server_name _; ssl_certificate /etc/letsencrypt/live/[도메인주소]/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/[도메인주소]/privkey.pem; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } }
ex) [도메인 주소] = bbiyak.shop
# nginx 재시작
sudo service nginx restart
https 접속
https://내 도메인 으로 정상적으로 접속이 된다면
SSL 인증서 적용 성공
번외) SSL 인증서 갱신
SSL 인증서 발급 시, manual 방식에서 진행했기때문에 자동 리뉴얼이 안된다.
인증서 발급 당시 아래 문구를 통해 확인할 수 있었다.
NEXT STEPS: - This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.
수동 리뉴얼을 crontab을 통해 진행해봅시다.
# SSL 인증서 만료일 확인
root@SSL-VM:~# sudo certbot certificates Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Found the following certs: Certificate Name: bbiyak.shop Serial Number: 38********* Key Type: ECDSA Domains: *.bbiyak.shop Expiry Date: 2025-04-21 00:56:29+00:00 (VALID: 89 days) Certificate Path: /etc/letsencrypt/live/bbiyak.shop/fullchain.pem Private Key Path: /etc/letsencrypt/live/bbiyak.shop/privkey.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 현재 서버 시간 확인
root@SSL-VM:~# date Tue Jan 21 02:25:34 UTC 2025
# crontab 등록
sudo crontab -e
번외) 혹시 nano로 열었을 경우 vi 에디터로 crontab 다시 열기
root@SSL-VM:~# export VISUAL=vi; crontab -e
# crontab 파일에 매달 1일 자정에 인증서 갱신 명령어 추가
0 0 1 * * certbot renew --renew-hook="sudo systemctl restart nginx
# crontab 재시작
sudo service cron restart
** 참고링크 : https://blog.pium.life/update-ssl/
번외2) SSL 인증서 자동 갱신
SSL 인증서 발급 시, manual 모드가 아닌 auto 모드로 진행하면
해당 명령어만으로 자동 갱신이 가능하다.
sudo certbot renew --dry-run
** 참고링크 : https://elfinlas.github.io/letsencrypt/211105_letscert-fail/'Linux' 카테고리의 다른 글
[Linux] 디렉터리 삭제 (0) 2025.01.19 [Ubuntu 24.04] 공장 초기화 (0) 2025.01.08 [Linux] ssy-keygen 생성으로 로컬PC에서 Linux VM으로 SSH 접속 (0) 2024.11.23 [Linux] Vmware에 리눅스 'CentOS' 설치하기 - 2 (클라이언트, 서버) (0) 2023.01.09 [Linux] Vmware에 리눅스 'CentOS' 설치하기 - 1 (0) 2023.01.09