ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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원에 구매 가능하니 구매 하는 것을 추천!

     

    https://www.gabia.com/?utm_source=google&utm_medium=cpc&utm_term=%EA%B0%80%EB%B9%84%EC%95%84&utm_campaign=%EA%B0%80%EB%B9%84%EC%95%84

     

    웹을 넘어 클라우드로. 가비아

    그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브

    www.gabia.com

     

    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 letsencrypt

    sudo apt-get install letsencrypt

     

    # 인증서 발급
    sudo certbot certonly -d "*.sample.com" --manual --preferred-challenges dns

    ex) 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/

     

    만료된 SSL 인증서 갱신하기

    이 글은 우테코 피움팀 크루 '주노'가 작성했습니다. 사건의 발단 https 인증서가 만료되어 https로 서비스 접근을 할 수 없게 되었다. 만료된 인증서를 어떻게 관리해야할 지 알아보자. 인증서 갱

    blog.pium.life

     

    번외2) SSL 인증서 자동 갱신

     

    SSL 인증서 발급 시, manual 모드가 아닌 auto 모드로 진행하면

    해당 명령어만으로 자동 갱신이 가능하다.

    sudo certbot renew --dry-run



    ** 참고링크 : https://elfinlas.github.io/letsencrypt/211105_letscert-fail/

Designed by Tistory.