CodeGym /행동 /Docker SELF /Let's Encrypt를 사용한 HTTPS (SSL/TLS) 설정

Let's Encrypt를 사용한 HTTPS (SSL/TLS) 설정

Docker SELF
레벨 7 , 레슨 3
사용 가능

Let's Encrypt를 사용한 HTTPS (SSL/TLS) 설정

1. 이 강의는 무엇에 관한 것이며, 왜 필요한가

요즘 세상에서는 HTTPS가 모든 사이트의 표준이 되었어. 네 사용자들이 안전하다고 느끼길 원하고 구글이 검색 결과 순위를 낮추지 않길 원한다면(맞아, HTTPS가 SEO에 영향을 줘), SSL/TLS를 반드시 설정해야 해. HTTPS 프로토콜은 암호화를 통해 사용자와 서버 간에 전송되는 데이터를 보호해서 해커들이 데이터를 가로챌 가능성을 없애줘.

이 강의에서는 Let's Encrypt를 사용해서 웹 서버에 무료로 HTTPS를 설정하는 방법을 단계별로 다룰 거야. Let's Encrypt는 무료 인증서와 그 설치 도구를 제공하는 신뢰할 수 있는 인증 기관(CA)이야. 또한 인증서 만료 문제를 피하기 위해 자동 갱신도 배울 거야.

HTTP 대 HTTPS

HTTP (Hypertext Transfer Protocol)는 데이터 전송 프로토콜이야. 고양이 밈 같은 거 볼 때는 괜찮지만, 문제가 있어! 만약 누군가 네 Wi-Fi 네트워크(예를 들어, 카페에서)에 접속하면, 네가 서버로 보내는 데이터를 가로챌 수 있어(끔찍하군, 네 비밀번호가 "그들의 비밀번호"가 될 수도 있어).

HTTPS (Hypertext Transfer Protocol Secure)는 암호화가 추가된 HTTP 버전이야. 클라이언트와 서버 간에 전송되는 데이터는 SSL/TLS (Secure Sockets Layer / Transport Layer Security)를 사용해 보호돼. 그래서 해커들이 데이터를 가로챈다고 해도 그 내용을 볼 수 없어.


2. Let's Encrypt와 Certbot 설치

Certbot — Let's Encrypt 개발자들이 만든 툴로, 웹 서버에 필요한 SSL 인증서를 쉽고 빠르게 받을 수 있도록 도와줘. 얘는 꽤 똑똑해서 Nginx나 Apache랑 잘 작동시키고, 우리 대신 까다로운 작업을 처리해줘. 설치부터 시작하자.

Certbot 설치

먼저, 서버를 최신 상태로 업데이트하자:

sudo apt-get update
sudo apt-get upgrade

이제 Certbot과 그 플러그인들을 설치하자:

  • Nginx용:

    sudo apt-get install certbot python3-certbot-nginx
    
  • Apache용:

    sudo apt-get install certbot python3-certbot-apache
    
재밌는 사실:

Certbot 자체는 Python 코드로, 커뮤니티에서 적극적으로 유지관리되고 있어. 그리고 대부분의 서버와 쉽게 통합할 수 있어.


3. Certbot으로 SSL 인증서 받기

Nginx용

Certbot은 Nginx를 사용 중인 경우, 사이트에 대해 HTTPS를 자동으로 설정할 수 있어. 다음을 입력해:

sudo certbot --nginx

Certbot이 현재 가상 호스트(server 블록)를 스캔할 거야. 그런 다음 HTTPS를 설정할 도메인을 묻는데, 도메인이 DNS를 통해 서버를 가리키고 있는지 확인해야 해 (예: A 레코드 사용).

출력 예시:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

도메인을 선택해 (예: 1).

Certbot은 자동으로 Nginx 설정을 구성 및 확인할 거야. 성공적으로 설치되면 다음과 같은 메시지가 표시될 거야:

Congratulations! Your certificate and chain have been saved ...

이제 사이트에 HTTPS로 접속할 수 있어. 브라우저에서 https://example.com을 열어 확인해봐.


Apache용

Apache를 사용하는 경우, 명령어가 약간 다를 거야:

sudo certbot --apache

Certbot은 가상 호스트(<VirtualHost> 블록)를 스캔하고 선택한 도메인에 대해 HTTPS를 설정하도록 제안할 거야. 필요한 도메인을 선택하면 Certbot이 알아서 설정해줄 거야.

프로세스가 완료되면 다시 축하 메시지가 표시되고, HTTPS를 통해 사이트에 접속할 수 있는지 확인할 수 있어.


4. 인증서 자동 갱신

Let's Encrypt 인증서는 90일 동안만 유효하니까 정기적으로 갱신해야 돼. Certbot이 이 작업을 자동으로 해줄 수 있는데, 모든 설정이 제대로 되어 있는지 확인해야 해.

인증서 만료 날짜 확인

인증서가 언제 만료되는지 확인할 수 있어:

sudo certbot certificates

출력에는 도메인과 인증서 만료 날짜가 표시될 거야.

자동 갱신 설정

Certbot 설치 중에 Cron이나 Systemd Timer에 자동 갱신 작업이 추가돼. 모든 게 제대로 동작하는지 확인하려면 Cron에 테스트 작업을 추가해봐:

sudo crontab -e

다음 줄을 추가해:

0 0 * * * certbot renew --quiet

이 명령은 매일 자정에 인증서를 확인하고 갱신해. --quiet 키는 불필요한 정보를 출력하지 않게 해줘.

수동 갱신

테스트 같은 목적으로 인증서를 수동으로 갱신하려면 다음을 사용해:

sudo certbot renew

5. HTTP → HTTPS 자동 리다이렉션 활성화

너의 사이트는 아직도 HTTP로 접속 가능할 거야. 하지만 이건 안전하지 않아. 모든 요청을 HTTPS로 리다이렉션하도록 설정해보자.

Nginx의 경우

Certbot은 인증서를 발급할 때 리다이렉션을 자동으로 설정할 수 있어. 이전에 이걸 활성화하지 않았다면, 가상 호스트 구성 파일에 리다이렉션을 수동으로 추가해:

server {
    listen 80;
    server_name example.com www.example.com;

    return 301 https://$host$request_uri;
}

변경 사항을 적용하려면 Nginx를 다시 로드해:

sudo systemctl restart nginx

Apache의 경우

Certbot은 리다이렉션도 자동으로 활성화할 수 있어. 이 단계를 놓쳤다면, 가상 호스트 파일에 다음을 추가해:

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

Apache를 재시작해:

sudo systemctl restart apache2

6. 에러 디버깅

뭔가 잘못되었다면 로그를 확인하는 것부터 시작해봐:

Nginx의 경우

sudo tail -f /var/log/nginx/error.log

Apache의 경우

sudo tail -f /var/log/apache2/error.log

설정 테스트

또한 웹 서버 설정을 확인해야 해:

  • Nginx의 경우:

    sudo nginx -t
    
  • Apache의 경우:

    sudo apachectl configtest
    

HTTPS 확인

네 사이트가 HTTPS로 접근 가능한지 확인해봐:

curl -I https://example.com

200 OK 상태와 Strict-Transport-Security 줄을 봐야 해. 이건 HTTPS가 잘 작동하고 있다는 걸 의미해.

이제 안전하고 보호된 HTTPS 사이트를 만들 준비가 됐어. 사용자도 만족할 거고, Google도 좋아할 거야. 그리고 네 데이터가 인터넷 악당에게서 안전하다는 걸 알면서 안심하고 잘 수 있을 거야.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION