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도 좋아할 거야. 그리고 네 데이터가 인터넷 악당에게서 안전하다는 걸 알면서 안심하고 잘 수 있을 거야.
GO TO FULL VERSION